USACO 1.5 Superprime Rib
手贱,一个地方敲错,浪费时间了。
1 /* 2 ID: cuizhe 3 LANG: C++ 4 TASK: sprime 5 */ 6 #include <cstdio> 7 #include <cstring> 8 #include <cmath> 9 #include <algorithm> 10 using namespace std; 11 #define N 1000001 12 long long p[300001]; 13 int o[N],prim[100001],num,len,n; 14 int judge(int x) 15 { 16 int i; 17 if(x == 1) return 0;//特判一下 18 if(x <= N-1) 19 { 20 if(!o[x]) 21 return 1; 22 else 23 return 0; 24 } 25 else 26 { 27 for(i = 1;i <= num-1;i ++) 28 { 29 if(prim[i] > x) 30 return 1; 31 if(x%prim[i] == 0) 32 return 0; 33 } 34 } 35 return 1; 36 } 37 void dfs(int x,int ans) 38 { 39 int i; 40 if(!judge(ans)) 41 return ; 42 if(x > n) 43 { 44 if(judge(ans)) 45 p[len++] = ans; 46 return ; 47 } 48 for(i = 1;i <= 9;i ++) 49 { 50 dfs(x+1,ans*10+i); 51 } 52 } 53 int main() 54 { 55 int i,j; 56 freopen("sprime.in","r",stdin); 57 freopen("sprime.out","w",stdout); 58 for(i = 2;i <= N;i ++) 59 { 60 if(!o[i]) 61 { 62 for(j = i+i;j <= N;j += i) 63 o[j] = 1; 64 } 65 } 66 num = 1;len = 1; 67 for(i = 2;i <= N;i ++) 68 if(!o[i]) prim[num++] = i; 69 scanf("%d",&n); 70 dfs(1,0); 71 sort(p+1,p+len); 72 for(i = 1;i <= len-1;i ++) 73 { 74 printf("%lld\n",p[i]); 75 } 76 return 0; 77 }