90分就第一个测试点RE!!!
查看原帖
90分就第一个测试点RE!!!
1472213
wangkaibo123楼主2025/7/28 09:23
#include <bits/stdc++.h>
using namespace std;
int a,n,x[200005],s[1200005],MAX=0,f=0;
bool cz(int l,int r,int k){//二分 
	if(l>r)return false;
	int mid=(l+r)/2;
	if(s[mid]==k)return true;
	if(s[mid]<k)return cz(mid+1,r,k);
	if(s[mid]>k)return cz(l,mid-1,k);
	
}
int main(){
	cin>>a>>n;
	for(int i=1;i<=1200;i++){//暴力枚举出所有幸运数 
		s[++f]=i*i;//生成超级幸运数 
		int k=s[f];
		if(s[f]<a)s[f]=5000000;//小于a的变最大(比x的最大值大5倍) 
		else for(int j=k*2;j<=1200005;j+=k)s[++f]=j;//倍数也是幸运数 
	}
	sort(s+1,s+1+f);//排序(不然二分不了) 
	for(int i=1;i<=n;i++){//读入+查找 
		cin>>x[i];
		if(cz(1,f,x[i]))cout<<"lucky\n";//是幸运数就直接输出 
		else{
			for(int j=x[i]+1;;j++){//否则幸运化 
				if(cz(1,f,j)){
					cout<<j<<endl;
					break;
				}
			}
		}
	}
	return 0;
}

提交记录

2025/7/28 09:23
加载中...