|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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()
复制代码
|
|