如何修改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
相关产品推荐
相关产品推荐

