我试图回答项目Euler#10,即找到1-2000000之间的素数之和。每次运行我的代码时,它都会给我0,我无法弄清楚原因。
public static boolean isPrime (int n)
{
double a = Math.sqrt(n);
for(int i = 1; i < a; i++){
if(n % i == 0){
return false;
}
}
return true;
}
public static void main (String[] args)
{
long sum = 0;
for(int i = 2; i < 2000000; i++){
if(isPrime(i)==true){
sum+= i;
}
}
System.out.println(sum);
}
答案 0 :(得分:15)
更改
for (int i = 1; i < a; i++) {
到
for (int i = 2; i < a; i++) {
任何数字都可以被1整除,即使是素数。
根据您当前的代码,没有数字是素数。
答案 1 :(得分:4)
除了代码中的逻辑任何整数模1都为零使你的isPrime
方法退出循环break
并返回false
,所以你应该从2
开始循环。
for(int i = 1; i < a; i++){
if(n % i == 0){//for 1 loop gets break;
答案 2 :(得分:2)
请查看已经提到的拼写错误..
同样在isPrime方法中,我应该从2而不是1开始。
public static boolean isPrime(int n){
double a = Math.sqrt(n);
for(int i = 2; i < a; i++){
if(n % i == 0){
return false;
}
}
return true;
}
public static void main(String[] args){
long sum = 0;
for(int j = 2; j < 2000000; j++){
if(isPrime(j)==true){
sum+= j;
}
}
System.out.println(sum);
}
答案 3 :(得分:2)
您的isprime逻辑错误,
if(n % i == 0)
总是返回一个true语句,导致它返回false。 所有数字都可以被1整除。
答案 4 :(得分:1)
public static boolean isPrime (int n)
{
double a = Math.sqrt(n);
int b =(int)Math.sqrt(n);
if(Math.pow(b,2)==n)
{
return false;
}
for(int i = 2; i < a; i++){
if(n % i == 0){
return false;
}
}
return true;
}
public static void main (String[] args)
{
long sum = 0;
for(int i = 2; i < 200000; i++){
if(isPrime(i)==true){
sum+= i;
}
}
System.out.println("Total is " +sum);
}