[英]Prime numbers sum
任何簡化此代碼的想法? 花費的時間太長了,但也許這是因為我的限制( 2000000
)非常高。
def is_prime(x):
for i in range(2, x):
if x == 2:
break
elif x % i == 0:
return False
break
total = 0
for num in range(2, 2000000):
if is_prime(num) != False:
print(num)
total += num
print(total)
為了加快速度,將上限設為x
平方根。
如果在那之前沒有因素,那么之后也不會有其他因素。
在你的函數is_prime()
你使用了一種非常強力的方法來徹底檢查每個可能的數字,看它是否是 x 的除數。 正如評論中提到的,您只能檢查sqrt(x)
因為乘法的另一半已經被檢查過。 此外,通過檢查 x 是否只能被 2 整除一次,然后僅迭代奇數,將計算次數減半是很常見的。 僅通過這兩個修改,您就可以獲得很多速度。
import math
def is_prime(x):
if x == 2: #2 is prime
return True
if x % 2 == 0: #divisible by 2
return False
for i in range(3,int(math.sqrt(x)),2): #only odd numbers up to sqrt(x) starting from 3
if x % i == 0: #divisible by i
return False
return True #we made it through the loop without finding a divisor
使用素數篩和 numpy 生成最多x
所有素數的示例可能如下所示:
import numpy as np
sieve = np.ones(x,bool)
sieve[:2] = False #0 and 1 are not prime
for i in range(2,int(x**.5)):
if sieve[i]: #`i` is prime therefore mark all multiples of i as not prime
sieve[i*2::i] = False
primes = np.where(sieve)[0] #extract primes as indices of `primes` that are true
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.