Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.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_Sum_Overflow_Primes_Digits - Fatal编程技术网

正在尝试编写一个程序,该程序列出数字加起来等于Python中的素数的数字。如何修复溢出错误?

正在尝试编写一个程序,该程序列出数字加起来等于Python中的素数的数字。如何修复溢出错误?,python,sum,overflow,primes,digits,Python,Sum,Overflow,Primes,Digits,我的目标是输出10^20和10^400范围内的所有数字,这些数字加起来就是一个素数,以便回答以下问题:“在[10^20,10^400]范围内存在多少个整数,它们的数字之和就是一个素数?” 在谷歌搜索时,我读到range会溢出,而xrange会更高效。使用xrange时,会出现错误“OverflowerError:Python int太大,无法转换为C long;” 如何输出答案而不出错?对于Python2.x,有人提出了类似的问题:这可能对较小的数字有所帮助 总的来说,通过Quora得到的答案非

我的目标是输出10^20和10^400范围内的所有数字,这些数字加起来就是一个素数,以便回答以下问题:“在[10^20,10^400]范围内存在多少个整数,它们的数字之和就是一个素数?”

在谷歌搜索时,我读到range会溢出,而xrange会更高效。使用xrange时,会出现错误“OverflowerError:Python int太大,无法转换为C long;”


如何输出答案而不出错?

对于Python2.x,有人提出了类似的问题:这可能对较小的数字有所帮助

总的来说,通过Quora得到的答案非常有用:就像其他人所说的,这取决于你有多少可用内存

摘自Quora文章:

真正的限制取决于Python可以访问的内存量。比如说,如果它有1GB可供使用,那么它将达到大约8000000080000000000位。因此,这将使您的数字一直达到28000000000280000000000。如果我们能以某种方式使用泰坦超级计算机的600多个TiB的CPU内存专门用于制作数字,我们可以一直到大约22522252。太多了


你需要找到另一种方法来实现它,或者给自己买一些永恒的东西……这里你需要的是大量的内存,而不是像这样简单的算法。你需要更多地研究排列和组合。您对数字的顺序不感兴趣,只对数字的总和感兴趣。10^20大小的数字将有20位数字。将它们视为单个数字的列表集:(0,0,0,…0,0)到(9,9,9,…9,9)。一旦你有了一个加起来就是素数的列表,然后计算出这个列表有多少个排列。
def isPrime(num):
    s=0
    for j in range (1, num):
        if(num%j==0):
            s=s+1
            if(s>1):
                break
    return(s)

a = 10**20;
b = 10**400;
for i in xrange(a, b):
        if(isPrime(i)==1 and isPrime(sum(int(x) for x in str(i)))==1):
            print('Sum of all digits of', i, 'is', sum(int(x) for x in str(i)))