暴力:(超时,只有40%能过)
#include <bits/stdc++.h>
using namespace std;
int _gcd(int a, int b) {
if (b == 0) return a;
return _gcd(b, a % b);
}
int main()
{
int n;
cin>>n;
int x=0,y=0;
int a[n];
for(int i=0;i<n;i++)
cin>>a[i];
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(_gcd(a[i],a[j])>1)
{
x=i+1;
y=j+1;
cout<<x<<" "<<y<<endl;
break;
}
if(x>0)
break;
}
if(x>0)
break;
}
return 0;
}
通过判断质因数:(100%通过)
#include <bits/stdc++.h>
using namespace std;
unordered_map<int, int> cc;
int myfun(int n, int y)
{
int x = 100001;
for (int i = 2; i * i <= n; i++)
{
if(n%i)
continue;
while (n % i == 0)
n = n / i;
if (cc.find(i) != cc.end() && cc[i] != y)
{
x = min(x, cc[i]);
}
else
{
cc[i] = y;
}
}
if (n > 1)
{
if (cc.find(n) != cc.end() && cc[n] != y)
{
x = min(x, cc[n]);
}
else
{
cc[n] = y;
}
}
return x < 100001 ? x : 0;
}
int main()
{
int n;
cin >> n;
int xx;
int ans1 = 100001;
int ans2 ;
for (int i = 1; i <= n; i++)
{
cin >>xx;
int ans = myfun(xx, i);
if (ans != 0 && ans<ans1)
{
ans1 = ans ;
ans2 = i ;
}
}
cout << ans1 << " " << ans2 << endl;
return 0;
}