【问题标题】:How to create a code that tells two integers are co-prime?如何创建一个告诉两个整数互质的代码?
【发布时间】:2017-06-09 02:56:07
【问题描述】:

编写一个方法,当传递两个正整数 m 和 n 时,如果 m 和 n 互质,则返回 true。当两个整数没有任何正整数公约数期望为 1 时,它们是互质数。

你可以假设m≤n。

public static boolean coPrime( int m, int n) { 
      if ( m%n == 0){ 
           return true; 
      } 
      return false; 

}

这是我目前所拥有的。 你怎么知道它们是互质的?

【问题讨论】:

  • return BigInteger.valueOf(m).gcd(BigInteger.valueOf(n)).equals(BigInteger.ONE);

标签: java primes


【解决方案1】:

如果两个数的 GCD 为 1,你就知道它们是互质数。

Euclid 的算法非常简单直接地找出两个整数之间的 GCD:

private int gcd(int p, int q) {
    if (q == 0) {
        return p;
    }
    return gcd(q, p % q);
}

所以你需要做的就是用你的两个整数调用这个方法,如下所示:

private boolean coprime(int p, int q) {
    return (gcd(p, q) == 1);
}

【讨论】:

    【解决方案2】:
    /* The running time of the function is O(m) - linear */
    
    public static boolean coPrime( int m, int n) {
    
          /* Since m <= n */
          int index = 2;
          bool is_coprime = true;
          while(index <= m){
             if(m % index == 0 and n % index == 0){
                 is_coprime = false;
             }
             index = index + 1;
          }
          return is_coprime; 
    }
    

    【讨论】:

    • 我假设 m 和 n 将大于 1。但是如果 m 和 n 可以等于 1,那么您可以添加条件 (index != 1) 来避免这种情况,因为 m 和n 可以被 1 整除。
    • 你忽略了在循环内增加index,所以你有一个无限循环。此外,如果 m == n == 1,则不需要更改,因为根据定义 1 和 1 是互质数。最后,与欧几里得算法的各种变体相比,该算法效率非常低。然而,这是一个很好的例子,说明 OP 应该首先提出自己的想法。
    猜你喜欢
    • 1970-01-01
    • 2013-07-22
    • 2023-03-23
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    相关资源
    最近更新 更多