第50题-连续素数和
本文包含欧拉项目第50题解法
问题描述
翻译为中文是:
41 是6个连续素数之和,41 = 2 + 3 + 5 + 7 + 11 + 13 ,它是两位数中能表示成最长的连续素数和的数字,1000以内最大的这样的数字是953,可以被表示为21个连续素数和
求解:100万以内,能被表示为最长的连续素数和的数是多少
解题思路
题目看起来很像最长连续子列问题,但是仔细想想又不太一样,对于最大连续子列问题有线性时间解法,但是这个问题我只想到了一个 的解法,所幸100万规模不大,运算时间也不算太长
rust语言实现
p50.rs
代码很直观,利用了之前写的2个工具方法生成某个数以内的素数表,判断一个数是否是素数。代码中有个很有意思的地方,在计算i到j之间的和时,没有多加一个临时变量k多加一层循环,而是在i循环开始时初始化一个sum,每次循环j的时候加上这个sum,这样可以节省一次循环优化性能
这个程序也有对应的单测,但是为了避免泄露答案就不写了,有兴趣的小伙伴可以自己补上
Last updated