Python素数检测程序判定失效 15/21/99等合数被误判为素数
Python素数检测程序误判合数问题
问题现象
编写的Python素数检测程序存在逻辑异常,输入15、21、99这类合数时,程序会错误将其判定为素数,无法输出正确的检测结果。
问题复现代码如下:
while True: number = input("Enter the number: ") new_number = int(number)-1 while int(new_number)>1: detector = int(number)%int(new_number) new_number-=1 if detector==0: print("its not a prime number") else:print("its a prime number")
错误原因
- 变量
detector仅会保存内层while循环最后一次运算的结果,也就是除数为2时的取模值,循环过程中出现过的整除结果会被后续运算覆盖。以输入15为例,循环从14开始递减,除数为3时15%3=0本应判定为非素数,但程序会继续执行循环直到除数为2,此时15%2=1,最终detector值为1,就会输出素数的错误结果。 - 内层循环没有在发现整除情况时提前终止,也没有设置专门的状态位记录是否存在除1和数字本身外的其他因数。
- 没有做输入边界校验,输入小于2的数字时会出现判定错误。
修复后代码
while True: number = int(input("Enter the number: ")) # 处理小于2的边界情况 if number < 2: print("its not a prime number") continue is_prime = True new_number = number - 1 while new_number > 1: if number % new_number == 0: is_prime = False # 发现因数直接跳出循环,减少无效计算 break new_number -= 1 if is_prime: print("its a prime number") else: print("its not a prime number")
内容的提问来源于stack exchange,提问作者ريان الجزيري
相关产品推荐
相关产品推荐

