素数环
1 #include<stdio.h> 2 #include<math.h> 3 int n; 4 int table[101]; 5 int ans[50]; 6 7 int x(int n) 8 { 9 int a=sqrt(n); 10 for(int i=2; i<=a; i++) 11 if(n%i==0) 12 return 0; 13 return 1; 14 } 15 16 int right(int m) 17 { 18 if(!table[(ans[m]+ans[m-1])]) 19 return 0; 20 for(int i=1; i<m; i++) 21 if(ans[i]==ans[m]) 22 return 0; 23 return 1; 24 } 25 26 void bfs(int m) 27 { 28 if(m>n) 29 { 30 if(table[ans[n]+1]) 31 for(int i=1; i<=n; i++) 32 { 33 printf("%d",ans[i]); 34 if(i!=n)printf(" "); 35 else printf("\n"); 36 } 37 } 38 else 39 { 40 for(int i=2; i<=n; i++) 41 { 42 ans[m]=i; 43 if(right(m)) 44 bfs(m+1); 45 } 46 } 47 } 48 49 int main() 50 { 51 int t=0; 52 for(int i=1; i<=100; i++)table[i]=x(i); 53 //for(int i=1; i<=100; i++)printf("%d is %d\n",i,table[i]); 54 while(scanf("%d",&n)!=EOF) 55 { 56 printf("Case %d:\n",++t); 57 ans[1]=1; 58 bfs(2); 59 printf("\n"); 60 } 61 return 0; 62 }