用户:
飞熊jSrt查看:1 回复:3 评论:1 创建时间:2023-08-29T13:10:53
#include<bits/stdc++.h>
using namespace std;
long long ns=1000000;
int a[1000000][2],b[1000000],c[7],ans=1;
int get(int a,int b){
return a/(int)(pow(10,b))%10;
}
void al(int u,int s,int o,int z){
if(u==z){
if(a[s][0]){
ans=0;
//cout<<'-'<<s<<'\n';
}
b[a[s][1]]=0;
return ;
}
for(int i=0;i<z&&ans;i++){
cout<<'\a';
if(c[i]==0){
c[i]=1;
al(u+1,s*10+get(o,i),o,z);
c[i]=0;
}
}
}
int main(){
int s=sqrt(ns);
for(int i=2;i<s;i++){
if(!a[i][0]){
for(int j=i*2;j<ns;j+=i){
a[j][0]=1;
}
}
}
int j=0;
for(int i=1;i<ns;){
while(a[++i][0]);
b[j]=i;
a[i][1]=j++;
}
for(int i=0;i<j;i++){
if(b[i]){
int cp=b[i],a=1,lg=0;
while(cp){
int m=cp%10;
if(m!=1&&m!=3&&m!=7&&m!=9){
a=0;break;
}
lg++;
cp/=10;
}
if(a){
int o=b[i];
//cout<<o<<'\n';
al(0,0,b[i],lg);
for(int j=0;j<7;j++){
c[j]=0;
}if(ans){
cout<<o<<' ';
}ans=1;
}
}
}
}
用来测验1000000以内有没有全排列均为质数的数
有没有大佬帮忙提高时间,或者配置好的同学把上面1000000换成5000000跑一下,扫到的最大数是337好蓝瘦啊()