素数环
1 #include<stdio.h> 2 #include<string.h> 3 int a[18]; 4 int v[18]={0}; 5 int t[33]={0}; 6 int N; 7 8 void init() 9 { 10 int i,j; 11 for(i=2;i<33;i++) 12 if(!t[i]) 13 for(j=2*i;j<33;j+=i) 14 t[j]=1; 15 } 16 17 void fun1(int n) //方法一 18 { 19 int i; 20 if(n==N && ! t[1+a[N-1]]) 21 { 22 for(i=0;i<N;i++) 23 printf("%d ",a[i]); 24 printf("\n"); 25 } 26 for(i=2;i<=N;i++) 27 { 28 if(!v[i] && !t[a[n-1]+i]) 29 { 30 v[i]=1; 31 a[n]=i; 32 fun1(n+1); 33 v[i]=0; 34 } 35 } 36 } 37 38 39 void fun2(int n) //方法二 40 { 41 int i,j,ok; 42 if(n==N && !t[1+a[N-1]]) 43 { 44 for(i=0;i<n-1;i++) 45 printf("%d ",a[i]); 46 printf("%d\n",a[i]); 47 } 48 else 49 for(i=2;i<=N;i++) 50 { 51 ok=1; 52 for(j=0;j<n;j++) if(a[j]==i) ok=0; 53 if(ok && !t[a[n-1]+i]) 54 { 55 a[n]=i; 56 fun2(n+1); 57 } 58 } 59 } 60 61 62 int main() 63 64 { 65 init(); 66 a[0]=1; 67 while(scanf("%d",&N)!=EOF) 68 { 69 memset(v,0,sizeof(v));//初始化 70 fun1(1); 71 } 72 return 0; 73 }