想了好一会 以为会有什么定理呢 没想到 就试着搜了 看来素数还是很多的 跑的飞快
注意会有前导0的情况 还有0,1不是素数。。。
1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<stdlib.h> 6 #include<vector> 7 #include<queue> 8 #include<cmath> 9 using namespace std; 10 #define LL long long 11 int flag; 12 char a[20]; 13 LL p[20]; 14 int judge(LL x) 15 { 16 if(x<2)return 0; 17 int i,o = sqrt(x*1.0); 18 for(i = 2; i <= o+1 ; i++) 19 if(x%i==0) 20 return 0; 21 return 1; 22 } 23 void dfs(int x,LL s,int pa[]) 24 { 25 if(flag) return ; 26 int i; 27 if(x>12) 28 { 29 if(judge(s)) 30 { 31 for(i = 1 ; i <= 12 ; i++) 32 cout<<pa[i]; 33 puts(""); 34 flag = 1; 35 } 36 return ; 37 } 38 for(i = 0; i <= 9 ; i++) 39 { 40 s+=p[12-x]*i; 41 pa[x] = i; 42 dfs(x+1,s,pa); 43 s-=p[12-x]*i; 44 } 45 } 46 int main() 47 { 48 int i,n; 49 int pa[20]; 50 LL s=0; 51 cin>>n; 52 p[0] = 1; 53 for(i = 1; i <= 12 ; i++) 54 p[i] = p[i-1]*10; 55 for(i = 1 ; i <= n ; i++) 56 { 57 cin>>a[i]; 58 pa[i] = a[i]-'0'; 59 s+=(a[i]-'0')*p[12-i]; 60 } 61 if(n==12) 62 { 63 printf("%lld\n",s); 64 return 0; 65 } 66 dfs(n+1,s,pa); 67 return 0; 68 }