QAQ
一个数是超级质数是要把这个数/10分解判断,那么反过来,我们直接从素数的基础上造超级质数,但是我们造出来的并不一定是素数,所以要有个素数判断,使用最简单的sqrt(n)判断
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
bool cf(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;
}
int num[9999],cnt;
int n;
void dfs(long long x)
{
if(x>n) return;
int d=cf(x);
if(x&&d) num[++cnt]=x;
if(d)//造的前提是这个数是素数
{
dfs(x*10+1);
dfs(x*10+2);
dfs(x*10+3);
dfs(x*10+5);
dfs(x*10+7);
dfs(x*10+9);//末尾是4,6,8的数肯定不符合要求
}
}
int main()
{
scanf("%d",&n);
dfs(0);
sort(num+1,num+cnt+1);//排序,从小到大输出
printf("%d\n",cnt);
for(int i=1;i<=cnt;i++)
printf("%d\n",num[i]);
}