Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 连续素数和_Python_Primes - Fatal编程技术网

Python 连续素数和

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]

我正在解决第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]

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