Java 为什么我们在得到素数因子时不必检查这个数是否为素数?

Java 为什么我们在得到素数因子时不必检查这个数是否为素数?,java,math,primes,prime-factoring,Java,Math,Primes,Prime Factoring,这是查找主要因素的典型代码: 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.a

这是查找主要因素的典型代码:

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;
  }
公共静态列表参数(整数){
int n=数字;
列表因子=新的ArrayList();
对于(int i=2;i 1){
因子。添加(n);
}
回报因素;
}

我的问题是,为什么不先检查一下我是否是素数,然后再将它添加到列表中呢?

我们可以通过矛盾来证明这是不可能的


想象一下,某个复合编号被添加到列表中。列表中必须添加最小的复合编号。我们把它叫做c,想象一下它最小的素因子是p。我们知道p 在这里,我们不需要检查数字是否为素数,因为 要加的数肯定是素数。。让我们举个例子

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

2) 18其倍数为2,3,6,9和18,但由于while循环,只添加了2和3,3

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

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

这就是我们计算这个数是否为素数的方法,也就是说,把一个数除以2,它也不是4,6,8的ab倍数,等等

在排序中,我们通过将它除以小的数字来消除除数字之外的其他数字


我希望您理解逻辑

,因为添加的任何数字都是素数,这是由for和while循环保证的。您能解释更多吗?