首先我要说的是,我知道关于素数有很多问题,这更多是关于我的代码,特别是布尔语句。
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。它似乎对每个值都返回true,即使对于非素数的数字也是如此。程序返回26的总和,而不是17如果我输入10作为上限。它似乎包括每个奇数,即使它应该检查素数。
我无法弄清楚为什么这段代码不起作用。就像我说的,我认为错误与布尔方法有关。
答案 0 :(得分:2)
如果你用这个i&lt;测试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
答案 1 :(得分:1)
您的问题与布尔方法无关。你的病情很糟糕。您正在条件而不是实际测试相等性中执行赋值。因此,它始终会评估为true
,并最终添加到您不应该添加的位置。
请改为:
if (k) {
sum += l;
}
顺便说一句,sum = sum
没有任何东西,也应该删除。