Peteryo01223 发表于 2021-4-1 16:55:49

Python 判断素数,两个小问题

本帖最后由 Peteryo01223 于 2021-4-1 17:09 编辑

原题:判断素数

答案:如下(我自己写的注释):
import math # 导入math模块

def is_prime(number): # 定义函数名称
    if number > 1: # 设定取值范围为正整数
      if number == 2: # 单独把 2 认定为素数
            return True
      if number % 2 == 0: # 排除所有偶数,减少计算量
            return False
      for current in range (3, int(math.sqrt(number) + 1),2): # 从3开始,在number开平方的结束,步幅是2。但是,为什么要加一?
            if number % current == 0:
      # 公元250 BC,古希腊数学家埃拉托塞尼提出:“要得到不大于某个自然数 N 的所有素数
      # 只要在2 至 N中,将不大于的素数的倍数全部划去即可”。
      # 内容等价转换:如果N是合数,则它有一个因子d满足1<d≤sqrt N
                return False
      return True # ? 何意?
    return False

问题:
1. 第9句,为何要加一?
2. 第15句和上面哪一句呼应?为何突然出现一个return True,没看懂。

jackz007 发表于 2021-4-1 17:55:02

1、对于语句
for c in range(a , b)
   循环中,c 值最大只能到 b - 1,所以
for current in range (3, int(math.sqrt(number) + 1),2):
      加 1 是为了让 current 的最大值能等于 int(math.sqrt(number))
2、return 是用来结束函数调用,反馈调用结果的。在 for 循环内有一个 return False,意思是进入循环前,假定 number 是一个素数,然后,试图在 for 循环内进行否定,就是说,如果在循环中找到了 number 的因数,那么,number 就不是素数,这时,执行 return False,函数调用随之结束;如果 for 循环可以被顺利地执行完(而没有执行 return False),那么,就说明 number 确实就是一个素数,所以,return True

Peteryo01223 发表于 2021-4-1 17:57:17

jackz007 发表于 2021-4-1 17:55
1、对于语句

   循环中,c 值最大只能到 b - 1,所以


谢谢您的耐心解答~
页: [1]
查看完整版本: Python 判断素数,两个小问题