使用Java获取给定数字的素数因子

时间:2015-06-17 18:22:45

标签: java primes factors

我试图使用java来获取给定数字的素因子。我能够编写以下代码。它返回2,5,10,因为素数因子为100而10则不是一个素数,并且它返回2,4,11为88 wile 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);
    }

  }
}

2 个答案:

答案 0 :(得分:1)

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

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

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

通过这种方式,您可以在其他任何内容中找到因子中的所有2。然后当你到达4之类的其他复合数来进行测试时,你将找不到它们。

答案 1 :(得分:0)

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

例如

(伪代码)

 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.

希望它有所帮助。