如何使用While语句实现Python输入列表中的素数查找?
问题分析与解决方案
原代码的核心问题:
- 忽略了2这个最小素数:当element=2时,
element%i ==0,while循环直接不执行,不会加入结果列表 - 合数直接跳过判断:比如4、6这类合数,第一次判断
element%i ==0就不满足while条件,循环不执行,也不会标记为非素数 - 素数判断后无限循环:找到素数后没有退出while循环,会反复执行else分支往列表里加同一个数
- 未处理<=1的数:这类数本身不是素数,代码没做过滤
基于While语句的正确实现
# 找列表中的素数 A = [int(x) for x in input().split(",")] B = [] for element in A: # 排除小于等于1的数,这类数不是素数 if element <= 1: continue # 2是唯一的偶素数,直接加入结果 if element == 2: B.append(element) continue # 用while循环判断素数 i = 2 is_prime = True while i * i <= element: # 优化:只需判断到平方根,减少循环次数 if element % i == 0: is_prime = False break # 找到因子,确定不是素数,直接跳出循环 i += 1 if is_prime: B.append(element) print(B)
代码说明
- 先过滤掉<=1的数,这类数直接排除在素数外
- 单独处理2,因为它是唯一的偶素数,无需进入循环判断
- 用
is_prime变量标记当前数是否为素数,初始设为True - while循环判断到
i*i <= element即可,比判断到element-1更高效 - 一旦找到能整除element的因子,立即标记为非素数并跳出循环,避免多余计算
- 循环结束后根据标记结果,决定是否将当前数加入结果列表
内容的提问来源于stack exchange,提问作者Stevendo
相关产品推荐
相关产品推荐

