违规紫衫
发现了新做法
从第2位开始地推上去
#include<bits/stdc++.h>
using namespace std;
bool check(int x){ //质数判断
if(x<2)return false;
if(x==2)return true;
for(int i=2;i*i<=x;i++){
if(x%i==0)return false;
}
return true;
}
vector<int>v; //记录已知特殊质数
int main(){
int n; //位数
cin>>n;
if(n==1){ //特判
cout<<"2\n3\n5\n7";
return 0;
}
int len=4; //n特殊质数结束,新总长度
int llen=1; //n位特殊质数开始,旧总长度
int lllen=0; //把老特殊质数结束+1变成新特殊质数开始
int llllen=0;
v.push_back(0);
v.push_back(2);
v.push_back(3);
v.push_back(5);
v.push_back(7);
for(int i=2;i<=n;i++){ //递推上去
lllen=len; //老特殊质数结束赋值给lllen
llllen=len;
for(int j=llen;j<=llllen;j++){ //从老特殊质数开始到结束
for(int k=1;k<=9;k++){ //
if(k==2||k==4||k==6||k==5||k==8)continue; //不是质数,直接跳出
int total=v[j]*10+k; //新数
if(check(total)==true){ //判断是不是质数
v.push_back(total); //是的把它加进去
len++; //总长度++
}
}
}
llllen=len;
llen=lllen+1; //旧长度=以前新长度
}
for(int i=llen;i<=len;i++){ //循环输出
cout<<v[i]<<endl;
}
return 0;
}