标签:des ble 除了 思路 row 开始 tchar 质数 预处理
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 using namespace std; 6 int n; 7 bool prime[40]; 8 void Prime() //预处理1~40之间的数是否为质数 9 { 10 for(int i = 3;i <= 40;++i) 11 { 12 bool flag = 0; 13 for(int j = 2;j<=sqrt(i);j==2?++j:j+=2) 14 if(i%j==0) {flag = 1;break;} 15 flag==0?prime[i]=1:prime[i]=0; //1即为质数0则否 16 } 17 } 18 int tail[40]; //列表 19 void print() //打印列表 20 { 21 for(int i =1;i<=n;++i) 22 printf(i==n?"%d\n":"%d ",tail[i]); 23 } 24 bool book[40]; //标记 25 void dfs(int x) 26 { 27 if(x==n) 28 { //最后再判断最后一个数与第一个数相加是否为质数 29 if(prime[tail[n]+tail[1]]) print(); 30 return; 31 } 32 for(int i = 2;i<=n;++i) 33 { 34 if(prime[i+tail[x]]&&book[i]==0)//标准dfs套路↓ 35 { 36 tail[x+1] = i; 37 book[i] = 1; 38 dfs(x+1); 39 book[i] = 0; 40 } 41 } 42 } 43 int main() 44 { 45 int cas = 0; 46 Prime(); 47 tail[1] = 1; book[1] = 1; 48 while(~scanf("%d",&n)) 49 { 50 memset(book,0,sizeof(book)); 51 printf("Case %d:\n",++cas); 52 if(n==1) printf("1\n"); 53 else if(n%2==1) ; //如果是奇数,铁定实现不了 54 else dfs(1); 55 putchar(‘\n‘); 56 } 57 }
标签:des ble 除了 思路 row 开始 tchar 质数 预处理
原文地址:https://www.cnblogs.com/darkboy/p/9402297.html