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

Monisen Number查找结果重复输出:如何实现单次显示?

解决Monisen Number重复输出问题

问题分析

原代码逻辑存在缺陷,导致同一结果多次打印:

  • 内层循环for i in range(2, p)中,每次满足p%i !=0且m%i !=0时就执行打印,同一个m会被重复输出
  • 原代码对素数的判断不严谨,甚至错误输出了非Monisen数(比如511=2^9-1=7×73,并非素数,却被错误标记)

解决方案

要实现每个结果仅显示一次,可按以下思路调整:

  • 先准确判断p是否为素数
  • 再验证对应的m = 2^p -1是否为素数
  • 使用集合存储已确认的Monisen数,利用集合自动去重的特性避免重复输出

修正后的代码

def is_prime(n):
    if n <= 1:
        return False
    # 遍历到平方根即可,优化素数判断效率
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True

# 用集合存储结果,自动去重
found_monisen = set()

for p in range(2, 10):
    if is_prime(p):
        m = (2 ** p) - 1
        if is_prime(m):
            found_monisen.add(m)

# 打印去重后的结果
for num in found_monisen:
    print(f"{num} is Monisen Number")

代码说明

  • is_prime函数:标准素数判断逻辑,通过遍历到目标数的平方根来优化性能
  • found_monisen集合:确保每个Monisen数仅被存储一次,从根源避免重复输出
  • 严格遵循Monisen数定义:仅当p是素数且2^p-1也是素数时,才将其纳入结果集

运行结果

7 is Monisen Number
31 is Monisen Number
127 is Monisen Number

内容的提问来源于stack exchange,提问作者YC_28

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 08:47:13