050.
连续素数的和
素数
41
可以写成六个连续素数的和: 41=2+3+5+7+11+13 。这是一百以下可以被写成连续素数的和中包含素数最多的。 一千以下可以被写成连续素数的和,并且包含素数最多的素数是 953
,这个和中包含
21
个 素数。求一百万以下可以被写成包含最多的连续素数的和的素数。
package edu.wust.lanqiaobei.ex0304;
import java.util.ArrayList;
import java.util.List;
public class ex_50 {
void solve(){
List<Integer> primes=new ArrayList<>();
int lim=1000000;
int i=3;
primes.add(2);
while(i<lim){
if(isPrime(i))
primes.add(i);
i+=2;
}
List<Integer> cursum=new ArrayList<>();//存放到每个素数之前所有素数的和
int sum=0;
for(int n:primes){
sum+=n;
cursum.add(sum);
if(sum>=lim)
break;
}
int count=0;//记录素数个数
int res=0;
//使用指针j指向curnum的头,指针k指向curnum的尾分别向后和向前移动遍历
for(int j=0;j<cursum.size();j++){
for(int k=cursum.size()-1;k>j;k--){
int tmp=cursum.get(k)-cursum.get(j);
if(k-j>count&&primes.contains(tmp)){
count=k-j;
res=tmp;
}
}
}
System.out.println(res);
}
boolean isPrime(int num){
for(int i=2;i*i<=num;i++){
if(num%i==0)
return false;
}
return true;
}
public static void main(String[] args) {
new ex_50().solve();
}
}