Python程序开发求助:查找指定整数上下的5个素数(不含自身)
解决你的素数查找问题
先看看你当前代码里的几个明显问题:
- 你的
while count1<5循环里直接加了break,这会导致循环只执行一次就退出,根本没法找到5个素数 x +=1的位置在循环外面,等于数值永远没变化,只会检查n+2这一个数- 完全没实现找比n小的素数的逻辑
- 没有处理n本身是素数的情况(比如如果n是19,找更小的素数时不能把19算进去)
下面是修正后的完整代码,严格遵循你要求的「禁止使用列表和函数」的规则:
# 获取用户输入 n = int(input("Please enter n: ")) # 找比n大的5个素数 larger_str = "" count_larger = 0 current = n + 1 # 从n的下一个数开始,避免n是素数时被包含 while count_larger < 5: is_prime = True # 判断current是否为素数,只需检查到平方根即可,提升效率 for i in range(2, int(current**0.5) + 1): if current % i == 0: is_prime = False break # 如果是素数,加入结果字符串,计数+1 if is_prime: larger_str += f"{current} " count_larger += 1 current += 1 # 找比n小的素数,最多5个 smaller_str = "" count_smaller = 0 current = n - 1 # 从n的前一个数开始,避免n是素数时被包含 while count_smaller < 5 and current >= 2: # 最小素数是2,到2就停止遍历 is_prime = True for i in range(2, int(current**0.5) + 1): if current % i == 0: is_prime = False break if is_prime: smaller_str += f"{current} " count_smaller += 1 current -= 1 # 按照示例格式输出结果,strip()去掉字符串首尾多余空格 print(f"Please enter n: {n} Larger prime numbers: {larger_str.strip()} Smaller prime numbers: {smaller_str.strip()}")
代码说明:
- 用字符串拼接来收集结果(因为不能用列表),最后统一输出
- 找素数时只检查到目标数的平方根,比遍历到目标数本身效率更高
- 从
n+1和n-1开始遍历,自动跳过n本身是素数的情况 - 找更小素数时,当数值小于2就停止,避免处理非素数的1或负数
测试输入n=20的情况,输出和你给出的示例完全一致:
Please enter n: 20 Larger prime numbers: 23 29 31 37 41 Smaller prime numbers: 19 17 13 11 7
如果输入n=5(本身是素数),会输出:
Please enter n:5 Larger prime numbers:7 11 13 17 19 Smaller prime numbers:3 2
如果输入n=6,更小的素数只有5、3、2三个,就输出全部:
Please enter n:6 Larger prime numbers:7 11 13 17 19 Smaller prime numbers:5 3 2
内容的提问来源于stack exchange,提问作者soup
相关产品推荐
相关产品推荐

