【发布时间】:2019-09-04 11:37:19
【问题描述】:
给定一个元素数组,我必须找到 MINIMUM GCD 可能 时间复杂度最小的任意两对数组之间。
例子
输入
arr=[7,3,14,9,6]
约束
N= 10^ 5
输出
1
解释
min gcd can be of pair(7,3)
我的幼稚解决方案 - O(n^2) 糟糕的幼稚蛮力
int ans=INT_MAX;
for (int i = 0; i < n; ++i)
{
for(int j=i+1; j<n; j++){
int g= __gcd(arr[i],arr[j]);
ans=min(ans,g);
}
}
return ans;
您能推荐一种时间复杂度最低的更好方法吗?
【问题讨论】:
-
要回答这个问题,必须了解有关列表中整数的大小及其分布的更多信息。例如,如果列表确实总是 100,000 长并且整数是随机生成的,那么算法中的 gcd 应该很快达到 1,此时您可以简单地退出程序。
标签: primes prime-factoring number-theory greatest-common-divisor modular-arithmetic