我的欧拉问题代码有什么问题?

时间:2016-03-21 07:15:10

标签: primes

由于某种原因它没有给出正确的答案,并且由于某种原因它给出了输入较小的正确答案。

public class Problem10 {
    public static void main(String[] args) {
        System.out.println(sumPrimeNumber(2000000));
    }
    public static boolean isPrime(int prime){
        boolean isPrime = true;
        if(prime%2==0)
            return false;
        for(int i = 3;i<=Math.pow(prime, 0.5);i+=2){
            if(prime%i==0){
                return false;
            }
        }
        return isPrime;
    }
    public static int sumPrimeNumber(int max){
        int sum = 0;
        int prime = 3;
        while(prime < max){
            if(isPrime(prime)){
                sum += prime;
            }
            prime += 2;
        }
        return sum + 2;
    }
}

3 个答案:

答案 0 :(得分:0)

您的int(最多20亿)可能会溢出。 将内注改为多头。

public class Problem10 {
    public static void main(String[] args) {
        System.out.println(sumPrimeNumber(2000000));
    }
    public static boolean isPrime(long prime){
        boolean isPrime = true;
        if(prime%2==0)
            return false;
        for(int i = 3;i<=Math.pow(prime, 0.5);i+=2){
            if(prime%i==0){
                return false;
            }
        }
        return isPrime;
    }
    public static int sumPrimeNumber(long max){
        long sum = 0;
        int prime = 3;
        while(prime < max){
            if(isPrime(prime)){
                sum += prime;
            }
            prime += 2;
        }
        return sum + 2;
    }
}

答案 1 :(得分:0)

我发现我应该改变总和。我虽然它没有溢出,因为它给出了一个正整数。

答案 2 :(得分:0)

您的isPrime()函数出错。它将2标记为复合,返回false。

将初始if更改为:

if (prime % 2 == 0)
  return prime == 2;

将为{2}返回true,为其他偶数返回false