直接枚举,肯定超时,用dp做很简单。下面贴代码,以作纪念。

View Code
 1 /*{
 2 ID:jzy3209981
 3 PROG:sprime
 4 LANG:C++
 5 }*/
 6 #include<stdio.h>
 7 #include<iostream>
 8 #include<string.h>
 9 #include<stdlib.h>
10 #include<math.h>
11 using namespace std;
12 
13 int number[8][100]={{2,3,5,7,NULL}};
14 char cpy[100];
15 
16 bool judge()
17 {    
18     int a,i;
19     a=atol(cpy);
20     for(i=2;i<=sqrt(a);i++)
21         if(a%i==0) return false;
22     return true;
23 }
24 int main()
25 {
26     freopen ("sprime.in","r",stdin);
27     freopen ("sprime.out","w",stdout);
28     int n,i,a,k,j,l;
29     for(i=1;i<8;i++)
30     {
31         l=0;
32         for(j=0;number[i-1][j]!=0;j++)
33         {    
34             sprintf(cpy,"%d",number[i-1][j]);            
35             for(k=0;k<10;k++)
36             {
37                 cpy[i]=k+'0';
38                 cpy[i+1]=NULL;
39                 if(judge())
40                 {
41                     a=atol(cpy);
42                     number[i][l]=a;
43                     l++;
44                 }
45             }
46         }
47     }
48     scanf("%d",&n);
49     i=0;
50     while(number[n-1][i]!=NULL)
51     {
52         printf("%d\n",number[n-1][i]);
53         i++;
54     }
55     return 0;
56 }

 

posted on 2012-07-15 22:25  醉春雨  阅读(129)  评论(0)    收藏  举报