题目链接
思路:枚举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);
}