猫史档案馆


一段毫无前途的代码

用户:飞熊jSrt飞熊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好蓝瘦啊()


回复

上一页1 页 / 共 1下一页
飞熊jSrt飞熊jSrt

懒得写注释了()哪看不懂直接问()

点赞1


评论


初夏晴雨初夏晴雨

痴迷于质数了属于是()

点赞1


评论


橘生淮北则为枳橘生淮北则为枳

留下足迹

点赞0


评论