第一次直接过,题目虽然简单,但是还是很高兴。最高位只能是{2,3,5,7},其他位只能是{1,3,7,9}
/* ID: hubiao cave PROG: sprime LANG: C++ */ #include<iostream> #include<fstream> #include<string> #include<list> using namespace std; const int ar[4]={2,3,5,7}; bool IsPrime(int ); int count; void dfs(int n,int m); list<int>li; int main() { ifstream fin("sprime.in"); ofstream fout("sprime.out"); fin>>count; dfs(1,0); for(list<int>::iterator it=li.begin();it!=li.end();it++ ) fout<<*it<<endl; return 0; } void dfs(int n,int m) { if(count==1) { for(int i=0;i<4;i++) li.push_back(ar[i]); return; } ; if(n==1) for(int i=0;i<4;i++) dfs(2,ar[i]); if(1<n&&n<count) { for(int i=1;i<=9;i++) { if(i==5||i%2==0) continue; if(IsPrime(m*10+i)) dfs(n+1,m*10+i); } } if(n==count) { for(int i=1;i<=9;i++) { if(i==5||i%2==0) continue; if(IsPrime(m*10+i)) li.push_back(m*10+i); } } } bool IsPrime(int n) { int i=2; for(;i*i<=n;i++) { if(n%i==0) return false; } return true; }