#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<math.h> using namespace std; bool qz[100000]; bool hz[100000]; int djx1,djx2; int l[6],r[6]; int m,n; int sum; int fz[5]={1,10,100,1000,10000}; bool search(int o) { if(o%6!=1&&o%6!=5)return 0; for(int i=5;i<=(int)(sqrt(o));i+=6) if(o%i==0|o%(i+2)==0)return 0; return 1; } void dfs(int x,int y) { if(y==6) { y=1; x++; } if(x==6) { for(int i=1;i<=5;i++) printf("%d\n",l[i]); sum++; printf("\n"); return; } for(int i=0;i<=9;i++) { if(qz[l[x]*10+i]==0)continue; if(qz[r[y]*10+i]==0)continue; if(x==y&&qz[djx1*10+i]==0)continue; if(x+y==6&&hz[i*fz[x-1]+djx2]==0)continue; l[x]=l[x]*10+i; r[y]=r[y]*10+i; if(x==y)djx1=djx1*10+i; if(x+y==6)djx2=i*fz[x-1]+djx2; dfs(x,y+1); if(x==y)djx1=djx1/10; if(x+y==6)djx2-=i*fz[x-1]; l[x]/=10; r[y]/=10; } } int main() { scanf("%d%d",&m,&n); for(int i=10003;i<=99999;i+=2) if(search(i)==1) { int tmp=0; tmp=i/10000+(i/1000)%10+(i/100)%10+(i/10)%10+i%10; if(tmp!=m)continue; qz[i/10000]=1; qz[i/1000]=1; qz[i/100]=1; qz[i/10]=1; qz[i]=1; hz[i]=1; hz[i%10]=1; hz[i%100]=1; hz[i%1000]=1; hz[i%10000]=1; } l[1]=n; r[1]=n; djx1=n; dfs(1,2); if(sum==0)printf("NONE"); return 0; }
1446:素数方阵 90'代码
最新推荐文章于 2024-03-29 17:58:23 发布