果断dfs
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
int n,a=0;
int b=13939133,cnt;
bool pr[100000009];
int f[100000009],cun[10000000];
void jud() {
memset(pr, true, sizeof(pr));
pr[0]=pr[1]=false;
int mx=sqrt(b);
for(int i=2;i<=mx;i++)
if(pr[i]) {
for(int j=2;j<=b/i;j++)
pr[i*j]=false;
}
}
void dfs(int t) {
int s;
if(t==n+1) {
cout<<a<<endl;
return ;
}
if(t==1) s=1;
else s=0;
for(int i=s;i<=9;i++) {
if(pr[a*10+i]==true) {
a=a*10+i;
dfs(t+1);
a=a/10;
}
}
}
int main() {
cin>>n;
jud();
dfs(1);
return 0;
}
埃式筛tle一个点emmm………………
欧拉筛mle emmm……
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
int n,a=0;
bool prime(int x)
{
if(x==1) return 0;
if(x==2) return 1;
for(int i=2;i<=sqrt(x);i++)
if(x%i==0)
return 0;
return 1;
}
void dfs(int t) {
int s;
if(t==n+1) {
cout<<a<<endl;
return ;
}
if(t==1) s=1;
else s=0;
for(int i=s;i<=9;i++) {
if(prime(a*10+i)==1) {
a=a*10+i;
dfs(t+1);
a=a/10;
}
}
}
int main() {
cin>>n;
dfs(1);
return 0;
}
这个算法竟然A 惊?!?!?!??!