玄关求助 为什么加一个没用过的数组就不会re?
查看原帖
玄关求助 为什么加一个没用过的数组就不会re?
226167
呆呆的她啊楼主2024/6/29 21:48

rt 很疑惑

我整个代码都没用到a数组

可是为什么我定义了它就不会re呢?

已经排除越界 爆longlong等行为

只要把a数组定义那行注释掉 就会re,如果要ac取消掉注释就行 真是太神奇了

神奇神奇

#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
const int range=2e7+10;
long long  MAXN=1e14+10000;
int n;
bool isprime[range];
int prime[range];
int a[range];
int   cnt;
int g[range];
int f[range];
int ans[range];
void euler()
{
	f[1]=g[1]=1;
	ans[1]=1;
	isprime[1]=1;
	for(long long  i=2;i*i<=MAXN;i++)
	{
		if(!isprime[i])
		{
			prime[++cnt]=i;
			g[i]=f[i]=i+1;
			ans[f[i]]=min(1LL*ans[f[i]],i);
		}
		for(long long j=1;j<=cnt&&1LL*prime[j]*i<=1LL*range;j++)
		{
			int   m=i*prime[j];
			isprime[m]=1;
			if(i%prime[j]==0)
			{
				g[m]=g[i]*prime[j]+1;
				f[m]=f[i]/g[i]*g[m];
				ans[f[m]]=min(ans[f[m]],m);
				break;
			}
			else {
				g[m]=prime[j]+1;	
				f[m]=f[i]*g[m];
				ans[f[m]]=min(ans[f[m]],m);
			}
		}
	}
}
void solve(int t)
{	
	cin>>n;
	if(ans[n]!=1e8)cout<<ans[n]<<endl;
	else cout<<-1<<endl;
	return ;
}
signed  main()
{
	ios::sync_with_stdio();
	cin.tie(0);
	cout.tie(0);	
	for(int i=1;i<=range;i++)ans[i]=1e8;
	euler();
	int t;
	cin>>t;
	for(int i=1;i<=t;i++)	solve(i);
	return 0;
} 
2024/6/29 21:48
加载中...