为什么本地测试根本不T交上去全T
查看原帖
为什么本地测试根本不T交上去全T
1411061
Code_Fish_Hp楼主2024/8/7 00:21

疑似正解哈,理论时间复杂度是够的

#include<bits/stdc++.h>
#define int long long
using namespace std;

const int MAXN=1e6+5;
int a1,b1,tot,ans[MAXN];

inline bool isprime(int x){
	if(x==0||x==1) return false;
	if(x==2) return true;
	for(int i=2;i*i<=x;i++){
		if(x%i==0) return false;
	}
	return true;
}

signed main(){
	ios_base::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	cin>>a1>>b1;
	for(int i=1;i<=9;i++){//一位数 
		if(isprime(i)) ans[++tot]=i; 
	}
	for(int i=1;i<=9;i++){//两位数 
		if(isprime(i*10+i)) ans[++tot]=i*10+i;//构建回文数+判断+储存答案 
	}
	for(int i=1;i<=9;i++){//三位数第一位模拟 
		for(int j=0;j<=9;j++){//三位数第二位模拟 
			if(isprime(i*100+j*10+i)) ans[++tot]=i*100+j*10+i;
		}
	}
	for(int i=1;i<=9;i++){//四位数第一位模拟 
		for(int j=0;j<=9;j++){//四位数第二位模拟 
			if(isprime(i*1000+j*100+j*10+i)) ans[++tot]=i*1000+j*100+j*10+i;
		}
	}
	for(int i=1;i<=9;i++){//五位数第一位模拟
		for(int j=0;j<=9;j++){//五位数第二位模拟
			for(int z=0;z<=9;z++){//五位数第三位模拟
				if(isprime(i*10000+j*1000+z*100+j*10+i)) ans[++tot]=i*10000+j*1000+z*100+j*10+i;
			}
		} 
	}
	for(int i=1;i<=9;i++){//六位数第一位模拟
		for(int j=0;j<=9;j++){//六位数第二位模拟
			for(int z=0;z<=9;z++){//六位数第三位模拟
				if(isprime(i*100000+j*10000+z*1000+z*100+j*10+i)) ans[++tot]=i*100000+j*10000+z*1000+z*100+j*10+i;
			}
		} 
	}
	for(int i=1;i<=9;i++){//七位数第一位模拟 
		for(int j=0;j<=9;j++){//七位数第二位模拟 
			for(int z=0;z<=9;z++){//七位数第三位模拟 
				for(int a=0;a<=9;a++){//七位数第四位模拟 
					if(isprime(i*1000000+j*100000+z*10000+a*1000+z*100+j*10+i)) ans[++tot]=i*1000000+j*100000+z*10000+a*1000+z*100+j*10+i;
				}
			}
		}
	}
	for(int i=1;i<=9;i++){//八位数第一位模拟 
		for(int j=0;j<=9;j++){//八位数第二位模拟 
			for(int z=0;z<=9;z++){//八位数第三位模拟 
				for(int a=0;a<=9;a++){//八位数第四位模拟 
					if(isprime(i*10000000+j*1000000+z*100000+a*10000+a*1000+z*100+j*10+i)) ans[++tot]=i*10000000+j*1000000+z*100000+a*10000+a*1000+z*100+j*10+i;
				}
			}
		}
	}
	for(int i=1;i<=9;i++){//九位数第一位模拟 
		for(int j=0;j<=9;j++){//九位数第二位模拟 
			for(int z=0;z<=9;z++){//九位数第三位模拟 
				for(int a=0;a<=9;a++){//九位数第四位模拟 
					for(int b=0;b<=9;b++){//九位数第五位模拟 
						if(isprime(i*100000000+j*10000000+z*1000000+a*100000+b*10000+a*1000+z*100+j*10+i)) ans[++tot]=i*100000000+j*10000000+z*1000000+a*100000+b*10000+a*1000+z*100+j*10+i;
					}
				}
			}
		}
	}
	/*至此,已成艺术*/ 
	for(int i=1;i<=tot;i++){
		if(ans[i]>=a1&&ans[i]<=b1) cout<<ans[i]<<endl;
		//if(ans[i]>=b1) break;//小优化 
	}
	return 0;
}
2024/8/7 00:21
加载中...