#include"stdio.h"
#include"stdlib.h"
typedef long long ll;
int a[4]={2,3,5,7}; //开头的数字一定是素数
int b[4]={1,3,7,9};//后面的数字不可能是偶数和5
ll mypow(ll a,ll b,ll m)
{
if(b==0)
return 1;
if(b==1)
return a%m;
ll temp=mypow(a,b/2,m);
temp*=temp;
temp%=m;
if(b&1)
temp*=a;
temp%=m;
return temp;
}
bool Miller_Rabbin(ll x)
{
if(x==2)
return true; ///2要直接判断
for(int i=1;i<=50;++i){
ll a=rand()%(x-2)+2;
if(mypow(a,x-1,x)!=1)
return false;
}
return true;
}
int n;
void dfs(int num,int dep)
{
//puts("fuck");
if(dep==n) {printf("%d\n",num);return; } //1,,3,,,7,,9,
for(int i=0;i<4;i++)
if(Miller_Rabbin(num*10+b[i]))
dfs(num*10+b[i],dep+1);
}
int main()
{
int i;
while(scanf("%d",&n)==1)
{
for(i=0;i<4;i++)
dfs(a[i],1);
}
return 0;
}
VJIOS 大素数 MR测素数法+DFS
最新推荐文章于 2021-08-30 00:39:55 发布
