我可以计算两个数字的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。
答案 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