我试图使用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);
}
}
}
答案 0 :(得分:1)
您没有测试原始号码中的多个相同因素。例如。在测试88
时,您会找到2
,但是您会错过其他2
。 (现在这个号码是44
。)然后你跳到3
并找不到它。然后,您会找到4
,因为4
是44
的一个因素。
您需要继续测试一个因素,直到您不再找到它为止。将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.
希望它有所帮助。