求助最后3个点TLE,怎么优化
查看原帖
求助最后3个点TLE,怎么优化
931309
Zz_pow楼主2023/11/9 16:48
#include<bits/stdc++.h>
using namespace std;
int t,n;
map<int ,int> v; //记忆化如果处理过就跳过 
map<int ,int> sum; //输出过就直接输出 
bool pd(int x){
	while(x>0){
		if(x%10==7){
			v[x]=1;
			return false;
		}
		x/=10;
	}
	return true;
}
bool fj(int x){
	for(int i=2;i*i<=x;i++){
		if(x%i==0){
			if(v[i]) return false;
			else if(v[x/i]) return false;
			else if(!pd(i)){
				v[x]=1;
				return false;
			}
			else if(!pd(x/i)){
				v[x]=1;
				return false;
			}
		}
	}
	return true;
}
int main(){
	cin>>t;
	while(t-->0){
		cin>>n;
		if(v[n]){
			cout<<-1<<endl;
			continue;
		}
		else if(!pd(n)){
			cout<<-1<<endl;
			continue;
		}
		else if(!fj(n)){
			cout<<-1<<endl;
			continue;
		}
		else{
			for(int i=n+1;;i++){
				if(sum[i]){
					 cout<<i<<endl;
					 break;
				} 
				if(v[i]) continue;
				if(!pd(i)) continue;
				if(fj(i)){
					 cout<<i<<endl;
					 sum[i]=1;
					 break;
				}
			}
		}
	}
	return 0;
}
2023/11/9 16:48
加载中...