【问题标题】:Get prime factors of a given number using Java [duplicate]使用Java获取给定数字的素数[重复]
【发布时间】:2015-06-17 18:22:44
【问题描述】:

我正在尝试使用 java 获取给定数字的素数。我能够编写以下代码。它返回 2,5,10 的素数为 100,而 10 不是素数,它也是返回 2,4,11 为 88 的素数,而 4 不是素数。谁能解释一下是什么原因以及如何解决?

import java.util.ArrayList;
import java.util.Random;

public class PrimeFactors {
public static void main(String[] args) {
    Random randomGenarator = new Random();
    int number = randomGenarator.nextInt(150);
    System.out.println("Prime factors of :" + number);
    findPrimeFactors(number);

}

private static void findPrimeFactors(int i) {
    ArrayList<Integer> list = new ArrayList<Integer>();
    for (int n = 2; n <= i; n++) {
        if (i % n == 0) {
            list.add(n);
            i /= n;

        }
    }
    for (int n : list) {
        System.out.println(n);
    }

  }
}

【问题讨论】:

    标签: java primes factors


    【解决方案1】:

    您没有在原始数字中测试多个相同的因素。例如。在测试88 时,你找到了一个2,但你错过了另一个2s。 (号码现在是44。)然后你跳到3 并没有找到它。然后你会找到4,因为444 的一个因子。

    您需要不断测试某个因素,直到您不再找到它为止。将if 替换为while

    while (i % n == 0) {
        list.add(n);
        i /= n;
    }
    

    这样,您将首先在因子中找到所有 2s。那么当你拿到其他合数比如4去测试的时候,你就找不到了。

    【讨论】:

    • 感谢您的解释。这真的帮助我理解了这个问题。
    【解决方案2】:

    你做错了。 在继续之前,您需要删除素数的所有因数。

    例如(伪代码)

     if i=100 ,
     continue dividing it by 2 until it is non-divisible 
     i=100/2 =50 , 
     then i=50/2 =25 then stop,
     then look for next prime.
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2018-09-28
      • 2012-03-04
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      • 2018-04-09
      • 2016-09-11
      • 1970-01-01
      • 2014-04-08
      相关资源
      最近更新 更多