由于某种原因它没有给出正确的答案,并且由于某种原因它给出了输入较小的正确答案。
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;
}
}
答案 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
。