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

如何修改Python函数以获取整数除自身外的第二大除数

如何修改Python函数以获取整数除自身外的第二大除数

嘿,我来帮你搞定这个问题!先看看你的原有代码为啥会输出18——你的逻辑是从2遍历到n-1,每次找到能整除n的数就更新result,所以最后result自然会是最大的真除数(也就是36的18),这和你想要的第二大除数差了一步。

下面给你两种简单的修改思路,按需选就行:

方法1:收集所有真除数再筛选(直观易懂)

这种方法先把所有除了n自身之外的除数都收集起来,排序后直接取倒数第二个元素,就是第二大的除数。好处是逻辑简单,容易理解,适合刚接触Python的朋友:

n = int(input("Enter an integer:"))
# 初始化列表存储所有除自身外的除数
divisors = []
for i in range(1, n):
    if n % i == 0:
        divisors.append(i)

# 处理特殊情况:比如输入是质数,此时除数只有[1]
if len(divisors) >= 2:
    # 排序后取倒数第二个元素
    second_largest = sorted(divisors)[-2]
    print(second_largest)
else:
    # 如果是质数,就输出唯一的真除数1(也可以根据需求改成提示信息)
    print(divisors[0] if divisors else "该整数没有有效除数")

测试输入36的话,divisors会是[1,2,3,4,6,9,12,18],排序后取倒数第二个就是12,完全符合你的需求。

方法2:只跟踪前两个最大值(更高效)

如果要处理很大的整数,收集所有除数会有点浪费内存,这时候可以只在遍历过程中跟踪最大和第二大的除数,不用存所有数:

n = int(input("Enter an integer:"))
# 初始化最大和第二大除数为1(所有正整数都能被1整除)
largest_div = 1
second_largest_div = 1

for i in range(1, n):
    if n % i == 0:
        # 如果当前除数比最大的还大,就把原来的最大移到第二大,更新最大
        if i > largest_div:
            second_largest_div = largest_div
            largest_div = i
        # 如果当前除数比第二大但比最大的小,且不等于最大的(避免重复值干扰)
        elif i > second_largest_div and i != largest_div:
            second_largest_div = i

print(second_largest_div)

拿36来测试的话,遍历到18时,largest_div会更新为18,而second_largest_div会变成之前的最大除数12,最后输出的就是12,完美符合你的要求。

另外提个小细节:如果输入的是质数(比如7),那它只有1和自身两个除数,这时候第二大的除数就是1,上面两种方法都能正确处理这种情况。

备注:内容来源于stack exchange,提问作者Dash David

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 10:53:05