Python 连续素数和
我正在解决第50道题 问题是: 找出100万以下的素数,它可以写成最连续的素数之和 例如,Python 连续素数和,python,primes,Python,Primes,我正在解决第50道题 问题是: 找出100万以下的素数,它可以写成最连续的素数之和 例如,41=2+3+5+7+11+13 41是可以写成最连续素数之和的素数 我写了一个代码来查找1000下面的素数,这些素数可以作为最连续的素数之和来写,检查我的代码是否找到了可以作为1000下面最连续的素数之和来写的素数(953)。这就是我想到的: #!/usr/bin/python import prime p = prime.genprimes(1000) prms = [i for i in p]
41=2+3+5+7+11+13
41
是可以写成最连续素数之和的素数
我写了一个代码来查找1000
下面的素数,这些素数可以作为最连续的素数之和来写,检查我的代码是否找到了可以作为1000
下面最连续的素数之和来写的素数(953
)。这就是我想到的:
#!/usr/bin/python
import prime
p = prime.genprimes(1000)
prms = [i for i in p]
for prm in prms:
count = 0
p = prm
temp = []
for a in prms:
p -= a
temp.append(a)
count += 1
if p == 0:
print prm, '\t', count, '\t', temp
prime.py
:
#!/usr/bin/python
def genprimes(limit):
"""
Returns the prime numbers(generator) until the limit(inclusive) given.
"""
D = {}
q = 2
while q <= limit:
if q not in D:
yield q
D[q * 2] = [q]
else:
for p in D[q]:
D.setdefault(p + q, []).append(p)
del D[q]
q += 1
问题是它找不到素数953
,这是连续素数的最长总和,它与1000
以下的素数相加
因此,我更改了代码,以排除在
for
循环中prm
为953
时的故障:
#!/usr/bin/python
import prime
p = prime.genprimes(1000)
prms = [i for i in p]
found = []
for prm in prms:
if prm == 953:
p = prm
for a in prms:
print p, '\t', a
p -= a
if p < -100:
break
知道我做错了什么吗?感谢您的帮助。您的循环始终以索引2开始。连续素数似乎不一定要从素数2开始。您将需要改变连续加法从哪个素数开始。一个较小的示例:如果您找到的是连续素数的最大和且和小于10,那么这就是
3+5=8
,而不是2+3=5
它可能不是(也不是)这样的情况,你总是通过把从2开始的所有素数相加得到最大的和
这一问题在TCS CodeVita 2016中提出
样本输出2
素数953是从7到89的21个素数之和。
#!/usr/bin/python
import prime
p = prime.genprimes(1000)
prms = [i for i in p]
found = []
for prm in prms:
if prm == 953:
p = prm
for a in prms:
print p, '\t', a
p -= a
if p < -100:
break
953 2
951 3
948 5
943 7
936 11
925 13
912 17
895 19
876 23
853 29
824 31
793 37
756 41
715 43
672 47
625 53
572 59
513 61
452 67
385 71
314 73
241 79
162 83
79 89
-10 97
#include<iostream>
using namespace std;
int main(){
long long int num=0;
cout<<"Enter the Size to count Prime number till NUM : ";
cin>>num;
long long int ary[num],j=2;
ary[0] =2,ary[1]=3;
for(int i=2;i<=num;i++){ // loop will add the prime number till num
if(i%2 != 0 && i%3 != 0){
ary[j] = i;
j++;
}
}
long long int k,sum=0,count=0;
cout<<"Sum of Consecutive Prime numbers from "<<2<<" to "<<num<<endl;
for(int i=0;i<=j;i++){
for(k=0;k<j;k++){
sum+= ary[k];
if(sum %2 !=0 && sum%3!=0 && sum<=num){
count++;
cout<<sum<<endl;
}
}
}
cout<<"Total Consecutive Count : "<<count<<endl;
}
Enter the Size to count Prime number till NUM : 20
Sum of Consecutive Prime numbers from 2 to 20
5
17
Total Consecutive Count : 2
Enter the Size to count Prime number till NUM : 100
Sum of Consecutive Prime numbers from 2 to 100
5
17
41
77
Total Consecutive Count : 4