Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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_Algorithm_Math_Primes - Fatal编程技术网

使用Python查找数字是否为素数

使用Python查找数字是否为素数,python,algorithm,math,primes,Python,Algorithm,Math,Primes,可能的重复项: 我正在研究Euler项目问题10,其状态如下: Find the sum of all the primes below two million. 以下是我的节目: numbers = [] sum = 0 range_number = 2000000 #Appends all numbers in range for i in range(2, range_number): numbers.append(i) #i is every entry in numb

可能的重复项:

我正在研究Euler项目问题10,其状态如下:

Find the sum of all the primes below two million.
以下是我的节目:

numbers = []
sum = 0
range_number = 2000000

#Appends all numbers in range
for i in range(2, range_number):
    numbers.append(i)

#i is every entry in numbers, n is the multiples of numbers[i] starting at one 
#value of numbers[i] after i. This is the Sieve of Eratosthenes.
for i in range(0, len(numbers)-1):
    if numbers[i] != None:
        for n in range(i + numbers[i], len(numbers)-1, numbers[i]):
            numbers[n] = None

#Adds all the numbers that are not None
for i in numbers:
    if i != None:
        sum += i

print(sum)
我的程序将该范围下每个数字的所有倍数都更改为“无”,这将消除所有组合,只留下素数

当我插入一个简单的数字,比如10,我得到了错误的答案。请告诉我哪里出了问题,而不是仅仅发布你自己的程序。 其他帖子提到使用平方根,但我没有真正理解


谢谢。

你的问题是你永远不会消除数字中的最后一个数字。如果范围_数为21,则len(数字)为20,len(数字)-1为19。所以这一行:

for n in range(i + numbers[i], len(numbers)-1, numbers[i]):
从不从列表中删除数字20。如果你把清单打印出来,你就可以看到这个。因此,目前,如果range_数比质数多一个,那么您的解决方案会给出正确的答案,但如果range_数比复合数多一个,则会被range_数-1关闭

要解决该问题,只需将行更改为:

for n in range(i + numbers[i], len(numbers), numbers[i]):

这不可能是您的实际代码;不能将整数赋给
范围
,然后尝试调用
范围()
。你没有得到错误的答案,你会得到一个异常,告诉你整数是不可调用的。你是对的,我只是为了清楚起见添加了变量。谢谢,我会修正的。那篇文章上的函数是素数(a)是不同的,它会检查每一个小于输入值的数字,如果它是一个因子,这对我的程序来说太长了。为什么你要对范围(2,范围)中的I使用
:数字。附加(I)
而不是
数字=范围(2,范围\u数字)
(或
数字=列表(range2,range_number))
适用于较新的蟒蛇)?我想这也行,谢谢。我终于得到了正确的答案,即142913828922。非常感谢。