直接枚举,肯定超时,用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 }

浙公网安备 33010602011771号