You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 18:12:32