Codeforces Round #552 (Div. 3) G. Minimum Possible LCM(数论)

题目链接
在这里插入图片描述
思路:枚举1-1e7作为因子,然后看看它的倍数存不存在,比较一下最大值就行。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e7+1;
int n,x,y,pos[maxn],num[maxn];
ll ans=1e18+1;
int main()
{
	scanf("%d",&n);
	for(int i=1,k;i<=n;++i)
	{
		scanf("%d",&k);
		num[k]++;
		if(num[k]>1&&k<ans)
		{
			x=pos[k];y=i;
			ans=k;
		}
		pos[k]=i;
	}
	for(int i=1;i<=maxn;++i)
	{
		ll t=0;
		for(int j=i;j<=maxn;j+=i)
		{
			if(!num[j]) continue;
		if(!t) t=j;
		else {
			ll g=__gcd(1LL*j/i,t/i);
			if(g==1)
			{
				if(ans>(j/i*t)) ans=j/i*t,x=pos[t],y=pos[j];
			}
			break;
		}
		}
	}
	if(x>y) swap(x,y);
	printf("%d %d\n",x,y);
}
发布了283 篇原创文章 · 获赞 0 · 访问量 7290

猜你喜欢

转载自blog.csdn.net/qq_42479630/article/details/105127350
今日推荐