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

Python编程练习:求20个输入数中约数最多的数(同数取大)代码问题

问题分析与代码修正:约数个数最多的整数筛选问题

问题场景

输入20个整数,找出其中约数个数最多的数,输出该数及其约数个数;若多个数约数个数相同,需输出数值较大的数。示例输入中正确输出应为594 16,但现有代码输出570 16,需排查并修正问题。

代码错误分析

你的代码存在两个核心问题:

  • 条件判断逻辑位置错误:处理「约数个数相同但数值更大」的判断被嵌套在「约数个数大于当前最大值」的条件块内,导致该逻辑永远无法触发——当divisor(x) > div_max时,div_val刚被赋值为x,div_val < x不可能成立。
  • 重复计算约数个数:多次调用divisor(x),既降低运行效率,也容易引入不必要的逻辑误差。

修正后的代码

def divisor(x):
    cnt = 0
    # 优化:遍历到平方根即可,提升计算效率
    for i in range(1, int(x**0.5) + 1):
        if x % i == 0:
            # 避免平方数的约数重复计数
            cnt += 1 if i == x // i else 2
    return cnt

div_max = 0
div_val = 0

for _ in range(20):
    x = int(input())
    current_cnt = divisor(x)
    # 优先判断约数个数是否更大
    if current_cnt > div_max:
        div_max = current_cnt
        div_val = x
    # 再处理约数个数相同但数值更大的情况
    elif current_cnt == div_max:
        if x > div_val:
            div_val = x

print(div_val, div_max)

修正说明

  1. 调整判断逻辑:将「约数个数相同但数值更大」的判断单独作为elif分支,确保后续出现符合条件的数时能正确更新结果。
  2. 优化约数计算:把遍历范围从1到x改为1到sqrt(x),同时处理平方数的重复计数问题,大幅提升大数的计算速度。
  3. 缓存计算结果:将当前数的约数个数存入current_cnt,避免重复调用函数计算,减少冗余操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:15:30