马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
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 is_prime(number): # 这个函数用来计算质数
if number > 1: # 质数定义 必须大于 1 才有意义
if number == 2: # 最小的质数就是 2 了 如果是 2 直接返回
return True
if number % 2 == 0: # 如果被 2 整除了说明不是质数,这边单独列出来,防止开平方后数小导致没进入 for 循环进行判断
return False
for current in range(3, int(math.sqrt(number) + 1), 2): # 用开平方来计算质数,大大去除重复率
if number % current == 0: # 只要有一次整除 则就不为质数
return False
return True # 全部都for 还没返回 说明是该数只被 1 和 本身整除,是质数
return False # 质数必须大于 1 才有意义
def get_primes(number): # 含有 yield 的关键字函数,就算是生成器 generator
while True:
# 生成器必须有 while 循环,因为每次运行到 yield 返回后下次运行就从 yield 的下一行开始运行,所以需要 while 循环来持续”产生“yield
if is_prime(number): # 计算质数,直到为质数然后通过生成器返回
yield number
number += 1
def solve():
total = 2 # 初始化,这个是最小的质数所以下面直接从 3 开始计算
for next_prime in get_primes(3): # 循环调用生成器 生成质数
if next_prime < 2000000: # 小于两百万以下的质数条件
total += next_prime # 每次生成出的质数列加到 total 上
else:
print(total) # 直到 next_prime 质数大于两百万 然后返回
return
if __name__ == '__main__':
solve()
|