|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目:10 以内的素数之和是:2 + 3 + 5 + 7 = 17,那么请编写程序,计算 2000000 以内的素数之和?
这是正确代码:
import math
def is_prime(number):
if number > 1:
if number == 2:
return True
if number % 2 == 0:
return False
for current in range(3, int(math.sqrt(number) + 1), 2):
if number % current == 0:
return False
return True
return False
def get_primes(number):
while True:
if is_prime(number):
yield number
number += 1
def solve():
total = 2
for next_prime in get_primes(3):
if next_prime < 2000000:
total += next_prime
else:
print(total)
return
if __name__ == '__main__':
solve()
我编写的代码:
import math
def total():
total=0
num=0
while True:
if is_prime(num):
total=total+num
num+=1
if num>2000000:
return total
def is_prime(num):
if num>1:
if num==2:
return True
elif num%2==0:
return False
else:
for i in range(3,int(math.sqrt(num)+1),2):
if num%i==0:
return False
return True
return False
虽然我没用生成器,但我编写的这段代码,也没有用列表来储存所有0-2000000的素数。
而是在total()这个函数里面,num返回一个值就被加进了total里面,所以不消耗太多内存吧。
为什么我的代码一直运行不出结果呢?
|
|