让我首先说,我知道有很多关于素数的问题,这更多的是关于我的代码,特别是布尔语句。
public class SumPrime
{
public static void main(String[] args) {
int top = inputInt("enter the number please");
int sum;
if (top > 2) {
sum = 2;
} else {
sum = 0;
}
int i;
int l;
for(l=3; l<top; l+=2){
boolean k = test(l);
String r;
if(k = true){
sum=sum+l;
output(l);
}else {
sum=sum;
}
}
System.out.println("The sum is " + sum);
}
static boolean test(int v) {
if (v%2==0)
return false;
for(int i=3; i<v; i+=2) {
if(v%i==0)
return false;
}
return true;
}我试图编码一个程序,它将给我一个输入值以下的素数之和。在上面的代码下面,我有输入/输出语句,所以这不是问题。至少在我看来,这段代码应该可以正常工作。我对java比较陌生,对布尔变量和语句非常陌生,因此很容易出现问题。(我找了一个答案,什么也没找到)
测试子程序应该检查一个数字是否为素数,如果是,则返回true,如果不是,返回false。它似乎对每个值都是正确的,甚至对于不是素数的数字也是如此。程序返回一个26和,而不是17,如果我输入10作为上限。它似乎包括每一个奇数,即使它应该检查素数。
我不明白为什么这段代码不能工作。就像我说的,我认为这个错误与布尔方法有关。
发布于 2013-11-17 03:03:32
您的问题与您的布尔方法无关。你的情况很糟。您在条件中执行赋值,而不是实际测试相等性。因此,它总是计算为true,最后添加不应该添加的地方。
取而代之的是这样做:
if (k) {
sum += l;
}顺便说一句,sum = sum并不是这样,也应该被删除。
发布于 2013-11-17 02:52:21
如果你用这个测试9,我<9就是测试。当i=9时,for循环中止并返回true
static boolean test(int v) {
if (v%2==0)
return false;
for(int i=3; i<v; i+=2) {
if(v%i==0)
return false;
}
return true;
}编辑:
此外,您也不应该测试素数超过目标数的一半,理想的最大值是sqrt(x) +1。
https://stackoverflow.com/questions/20026577
复制相似问题