huyanmin 发表于 2021-4-7 18:42:54

python 49课作业,求详解

#1. 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()

qiuyouzhi 发表于 2021-4-7 18:49:24

请复习range用法

暗夜岛猫妖 发表于 2021-4-7 19:11:55

for current in range(3, int(math.sqrt(number) + 1), 2):#这三行语句是什么意思

for current in range(3, int(math.sqrt(number) + 1), 2):

current 是自己定义的一个标签名字,很明显你对range用法并不熟练,假设 range(1,7,2),其内容其实是1,3,5,经过for循环迭代出来,range(1,7)内容是1-6,range(1,7,2)中的2,其实是跳的意思,同理range(1,7,3)的内容是1和4。

for current in range(3, int(math.sqrt(number) + 1), 2),而sqrt()函数的作用是返回内容的平方根,所以这行代码的意思是将range()中的内容迭代于current,其内容是3到number的平方根,跳2,
其中+1的作用是什么?
range(1,x),是不会打印x的,而是止于x的前一位,所以+1抵消,使其包含number的平方根


基础要打牢{:10_256:}
页: [1]
查看完整版本: python 49课作业,求详解