如何找到给定集合中某些数字对的GCD?

时间:2015-11-26 05:06:26

标签: greatest-common-divisor number-theory

我可以计算两个数字的GCD。给定一个S = {1,2,3,4,5},我必须计算每对的GCD,如{1,2} = 1,{1,3} = 1,{1,4} = 1 ,{1,5} = 1,{2,3} = 1,{2,4} = 2,{2,5} = 1,依此类推。我知道O(N ^ 2)解决方案只是简单地计算每对的GCD,如果大于2 <= n <= 10 ^ 9或更大的情况下会给我TLE,但我想学习O(N * sqrt(N))解决方案或更好。我想分别对每一对的GCD。

2 个答案:

答案 0 :(得分:0)

您可以使用Euclidean algorithm

编写程序

查看找到GCD(1071,462)

的示例

GCD {1,2,3,4,5} = GCD {GCD {GCD {1,2},GCD {3,4}},5}

仅使用Euclidean algorithm 4次来计算给定集合的GCD S = {1,2,3,4,5}

通过使用Euclidean,您唯一需要做的就是找到提醒,直到数字被解除为止。

答案 1 :(得分:0)

基本欧几里德算法应该有所帮助。

int gcd(int a, int b){
    if (a == 0)
        return b;
    return gcd(b%a, a);
}

有趣的是,如果你想找到整套的GCD。您需要做的就是从获得的GCD中形成一个子集并进行迭代,除非只剩下1个最终元素。 例如S={1,2,3,4,5} => S1={GCD(1,2) , GCD(3,4) , add 5 } => S2={GCD(1,1) , and 5 } => S3={GCD(1,5)} => 1