【问题标题】:How to find the GCD of some pairs of numbers of a given set?如何找到给定集合的一些数字对的 GCD?
【发布时间】:2015-11-26 05:06:25
【问题描述】:

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

【问题讨论】:

    标签: greatest-common-divisor number-theory


    【解决方案1】:

    基本欧几里得算法会有所帮助。

    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

    【讨论】:

      【解决方案2】:

      你可以用Euclidean algorithm写一个程序

      查看查找GCD(1071,462)的例子

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

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

      通过使用欧几里得,您唯一需要做的就是找到提醒,直到数字消失。

      【讨论】:

      • 但可能不是 O(n*sqrt(n) 解决方案。我想要每对的 GCD。我不想要整个集合的 GCD。
      • @RazibHossainShuvo 如果您有更好的解决方案,为什么还需要它?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多