欧拉计划第50题

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();
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值