嵌套for循环实现质数筛选功能报错,请求代码修正帮助
问题分析与修复
你的代码存在两个核心问题,导致无法正确筛选质数:
内层循环范围无效
range(number, 2)不会生成任何循环项——Python的range(start, stop)仅当start < stop时才会产生序列,而你的number从2开始,远大于2,所以内层循环完全没执行,prime列表始终为空。质数判断逻辑颠倒
你当前的逻辑是“若number能被div整除就加入列表”,但质数的定义是仅能被1和自身整除,正确逻辑应该是:一个数如果找不到1和自身之外的因数,才是质数。
修复后的代码
n = int(input("Insérer entier inférieur à 100")) prime = [] if 100 >= n > 1 : for number in range(2, n+1): is_prime = True # 先假设当前数是质数 # 优化:仅检查到number的平方根即可,减少循环次数 for div in range(2, int(number**0.5) + 1): if number % div == 0 : is_prime = False # 找到因数,标记为非质数 break # 无需继续检查 if is_prime: prime.append(number) print(prime) # 打印结果验证 else: print("请输入大于1且小于等于100的整数")
关键说明
- 内层循环优化:若
number存在大于其平方根的因数,对应的另一个因数必然小于平方根,因此只需检查到平方根就能完成判断,提升效率。 - 先标记为质数,再通过循环验证推翻假设,完全贴合质数的判断逻辑。
内容的提问来源于stack exchange,提问作者user20471940
相关产品推荐
相关产品推荐

