我的结果是错的,但我找不到错误。
问题描述:
素数41可以写成六个连续素数的总和:41 = 2 + 3 + 5 + 7 + 11 + 13.这是连续素数的最长和,它加到低于一百的素数。连续素数低于1000的连续素数加上一个素数,包含21个项,等于953.哪个素数低于一百万,可以写成最连续素数的总和?
我的想法:
- 从第一个素数2开始,计算连续素数的最长和,这些素数会增加到<100>以下数。
- 从最长的倒计时,对于每个特定的长度,计算从2开始的序列开始的总和,然后计算从第二个素数开始的序列开始的总和...
- 当总和是素数时停止。
醇>
我的代码:
public class Prob50 {
public static void main(String[] args) {
// TODO Auto-generated method stub
long sum=0;
int count=0;
for(int i = 2; ; i++){
if(isPrime(i)){
if((sum+=i)>1000000){
sum-=i;
break;
}
count++;
}
}
int jump=0;
boolean isOver= false;
boolean isAns= false;
for(;count>0;count--){
jump=0;
for(;;){
int tempj=jump;
int tempc=count;
sum=0;
for(int i = 2;tempc>0 ; i++){
if(isPrime(i)&&tempj>0){
tempj--;
continue;
}
if(isPrime(i)){
tempc--;
if((sum+=i)>1000000){
sum-=i;
isOver=true;
}
}
}
if(isPrime(sum)){
isAns=true;
break;
}
if(isOver){
break;
}
jump++;
}
if(isAns){
break;
}
}
System.out.println(sum+" "+count);
}
private static boolean isPrime(long n){
for(int i = 2 ; i <= Math.sqrt(n) ; i++){
if(n%i==0){
return false;
}
}
return true;
}
}
我的结果:
958577 536
答案是997651,计数应该是543。
答案 0 :(得分:2)
我想通了,只需要添加:
isOver= false;
在isOver= false;
和for(;;){
之间。