【问题标题】:Why we dont have to check if the number is prime when getting prime factors?为什么我们在获取质因数时不必检查数字是否为质数?
【发布时间】:2016-09-24 21:57:58
【问题描述】:

这是寻找素因数的典型代码:

public static List<Integer> primeFactors(int numbers) {
    int n = numbers;
    List<Integer> factors = new ArrayList<Integer>();
    for (int i = 2; i <= n / i; i++) {
      while (n % i == 0) {
        factors.add(i);
        n /= i;
      }
    }
    if (n > 1) {
      factors.add(n);
    }
    return factors;
  }

我的问题是,我们为什么不在将 i 添加到列表之前检查它是否为素数?

【问题讨论】:

  • 因为任何相加的数都是素数,这由 for 和 while 循环来保证。
  • 你能解释一下吗?

标签: java math primes prime-factoring


【解决方案1】:

我们可以通过反证法来证明这不可能发生。

想象一些合数被添加到列表中。必须有一些最小的合成数被添加到列表中。我们称它为 c,并假设它的最小素因数是 p。我们知道 p

【讨论】:

    【解决方案2】:

    这里我们不需要检查天气这个数字是否是素数,因为 要添加的数字肯定是素数..让我们举个例子

    1)16 它是 2,4,8,16 的倍数,但由于 while 循环,只添加了 2

    2)18 它的倍数是 2,3,6,9 和 18 但只有 2 和 3 ,3 因为 while 循环而被添加

    3) n 一个整数 我们不知道它的倍数,但是 当 i=2 时,数字变为奇数,所以现在所有偶数都被消除(意味着 2 的任何倍数都不能被 n/2 整除)

    当 i=3 时,如果 mod 为零,则相加,所有三的倍数都被消除 (表示任何 3 的倍数都不能被 n/3 整除)

    这就是我们计算这个数字是否为素数的方式,例如,将一个数字除以 2,然后它也不是 4、6、8 等的 ab 倍数

    在排序中,我们通过用小数除以消除其他数字

    希望你明白其中的逻辑

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-12
      • 1970-01-01
      • 1970-01-01
      • 2017-02-02
      • 2022-11-25
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      相关资源
      最近更新 更多