素数环, 经典的搜索题。
学了线段树之后,对递归有了一些体会,写这一题还是可以的。
ans的地方表示的是,寻找下一个数、
素数环, 经典的搜索题。 学了线段树之后,对递归有了一些体会,写这一题还是可以的。 ans的地方表示的是,寻找下一个数、 #include<stdio.h> int ss[41],visit[21],b[21]; void getss() { int i,j; for(i=1;i<=40;i++) ss[i]=1; ss[1]=0; for(i=2;i<=7;i++) for(j=i*i;j<=40;j=j+i) ss[j]=0; } void bfs(int ans,int n) { int i; if(ans==n+1&&ss[b[ans-1]+1]==1) { for(i=1;i<=n;i++) { if(i==1)printf("%d",b[i]); else printf(" %d",b[i]); } printf("\n"); return ; } for(i=2;i<=n;i++) { if(visit[i]==0) if(ss[i+b[ans-1]]==1) { visit[i]=1; b[ans]=i; bfs(ans+1,n); visit[i]=0; } } } int main() { int i,t=0,n; getss(); while(scanf("%d",&n)>0) { for(i=1;i<=n;i++) visit[i]=0; visit[1]=1; b[1]=1; printf("Case %d:\n",++t); if(n%2==1) {printf("\n");continue;} //当输入为奇数的数,不要搜了。 bfs(2,n); printf("\n"); } return 0; }