T1爆了啊啊啊啊啊啊啊啊啊啊啊啊啊
  • 板块学术版
  • 楼主夜阑
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/11/20 20:21
  • 上次更新2023/11/3 23:56:04
查看原帖
T1爆了啊啊啊啊啊啊啊啊啊啊啊啊啊
243263
夜阑楼主2021/11/20 20:21

下面这个代码luogu测评10分

求讲解555555555555

#include<iostream>
#include<cstdio>
using namespace std;
int num[10000100],n; 
int t,x[200010],maxn;
int f[10000100];
bool cmp(int x){
	while(x!=0){
		if(x%10==7)return 1;
		x/=10;
	}
	return 0;
}
int main(){
	freopen("number.in","r",stdin);
	freopen("number.out","w",stdout);
	cin>>t;
	for(int i=1;i<=t;i++){
		cin>>x[i];
		maxn=max(maxn,x[i]);
	}
	if(maxn<=100)n=1000;
	else if(maxn<=1000)n=10000;
	else if(maxn<=10000)n=20000;
	else if(maxn<=2*10e5)n=4*10e5;
	else n=10000010;
	for(int i=1;i<=n;i++){
		if(f[i]!=0)continue;
		if(i%7==0||cmp(i)!=0){
			//cout<<i<<':';
			for(int j=1;j*i<=n&&f[j]!=-1;j++){
				f[j*i]=-1;
				//cout<<j*i<<' ';
				num[i*j]=-1;
			}
			//cout<<endl;
		}
		else {
			f[i]=1;
		}
	}int l=1;
	for(int i=2;i<=n;i++){
		if(num[i]!=-1){
			num[l]=i;
			l=i;
		}
	}
	for(int i=1;i<=t;i++){
		cout<<num[x[i]]<<endl;
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}
2021/11/20 20:21
加载中...