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 }

你可能感兴趣的:(USACO)