波大大12138 发表于 2020-6-29 21:49:52

求20000以内的素数和

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()

这个代码的从头到尾都看不懂能帮忙注释一下每个语句的含义吗{:5_102:}

波大大12138 发表于 2020-6-29 21:50:25

@Twilight6

Twilight6 发表于 2020-6-29 22:25:32

波大大12138 发表于 2020-6-29 21:50
@Twilight6

好等下就来看哈哈~

Twilight6 发表于 2020-6-29 23:54:39

波大大12138 发表于 2020-6-29 21:50
@Twilight6



看注释吧:

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()

波大大12138 发表于 2020-6-30 09:02:06

Twilight6 发表于 2020-6-29 23:54
看注释吧:

if __name__ == '__main__':
    solve()

最后这个语句啥意思啊,

Twilight6 发表于 2020-6-30 09:03:40

本帖最后由 Twilight6 于 2020-8-18 21:24 编辑

波大大12138 发表于 2020-6-30 09:02
if __name__ == '__main__':
    solve()




当你把这个脚本当作模块导入其他脚本中,if __name__ == '__main__': 下面的方法是不被调用的

而平时你就可以当作调用主程序来用的即可
页: [1]
查看完整版本: 求20000以内的素数和