【发布时间】:2011-09-27 03:46:54
【问题描述】:
可能的重复:
Fastest way to list all primes below N in python
Checking if a number is a prime number in Python
我正在研究 Project 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)
我的程序将范围内每个数字的所有倍数更改为无,这应该消除所有复合并只留下素数。
当我为 range_number 插入一个简单的数字(例如 10)时,我得到了错误的答案。不要只发布你自己的程序,请告诉我哪里出错了。 其他帖子提到使用平方根,但我并没有真正理解。
谢谢。
【问题讨论】:
-
这不可能是你的实际代码;您不能将整数分配给
range,然后尝试调用range()。你不会得到错误的答案,你会得到一个异常,告诉你整数是不可调用的。 -
你说得对,为了清楚起见,我只是添加了变量。谢谢,我会解决的。
-
该帖子上的函数 is_prime(a) 不同,它检查每个小于输入的数字是否是一个因子,这对我的程序来说太长了。
-
你为什么使用
for i in range(2, range_number): numbers.append(i)而不是numbers = range(2, range_number)(或者numbers = list(range2, range_number))对于较新的Python)? -
猜猜也行,谢谢。
标签: python algorithm math primes