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 }
posted @ 2012-11-02 17:34  Naix_x  阅读(165)  评论(0编辑  收藏  举报