我目前正在开发一个程序,用户输入一个数字,该程序将为您提供最多该数字的素数数量。虽然没有错误,但程序总是输出相同的数字:3。这是代码:
public static int Prime(int num){
boolean isPrime = true;
int count = 0;
for (int a = 2; a <=num; a++){
for (int i = 2; i <= a/2; i++){
if (a == 2 || a == 3 || a == 5){
isPrime = true;
}
else if (a % i == 0){
isPrime = false;
}
}
if (isPrime == true)
count++;
}
return count;
}
最佳答案
在您的内部 for
循环中,您正在设置 isPrime
,但随后您继续循环。如果候选除数 i
不能完全除尽,后续循环可能会将 isPrime
设置为 false
。只有 2
、3
和 5
(第一个 if
条件中的 3 个数字)将其设置为 true
总是,所以你总是得到 3
。
相反,在内部 for
循环开始时将 isPrime
设置为 true
,并 break
退出每次设置 isPrime
后的内部 for
循环。如果数字是 2、3 或 5,请设置为 true
和 break
,这样就没有什么可以将其设置为 false
,这样您就可以计算它。如果您找到一个因子,它不是质数,因此设置为 false
和 break
,这样就没有任何东西可以将其设置为 true
并且不计入其中。
顺便说一句,您的最终 if
条件测试的是 boolean
;它可以简化为 if (isPrime)
。
关于java - 素数程序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29975143/