构造n位数的素数,而且前1到n-1构成的数也是素数,使用一个递归+素数判断搞定 #include<iostream> #include<fstream> #include<string> #include<memory.h> #include<cstdio> #include<queue> #include<vector> using namespace std; ifstream fin("sprime.in"); ofstream fout("sprime.out"); int num; int plist[10000],pcount=0; int prime(int n){ int i; if ((n!=2&&!(n%2))||(n!=3&&!(n%3))||(n!=5&&!(n%5))||(n!=7&&!(n%7))) return 0; for (i=0;plist[i]*plist[i]<=n;i++) if (!(n%plist[i])) return 0; return n>1; } void initprime(){ int i; for (plist[pcount++]=2,i=3;i<50000;i++) if (prime(i)) plist[pcount++]=i; } void solve(int res,int e,int t){ res=res*10+t; if(!prime(res)) return ; if(e==num){ fout<<res<<endl; return ; } for(int i=1;i<10;i+=2){ solve(res,e+1,i); } } int main(){ initprime(); fin>>num; for(int i=2;i<10;i++){ solve(0,1,i); } return 0; }