Primes之和 - 为什么我的代码返回0?

时间:2014-10-21 06:16:45

标签: java primes

我试图回答项目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);
}

5 个答案:

答案 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);
}