如何求数字的最大整数根?现有Python代码输出非预期结果该如何修改?
问题分析
- 遍历逻辑错误:当前你按power从小到大遍历,找到第一个匹配项就终止循环,但幂次越小对应的整数根越大,高幂次的匹配结果对应的根更小,提前终止会直接漏掉低幂次下的更大根。
- 根遍历范围硬编码:你把root的遍历范围写死为
range(2,6),最大仅能检索到5,64的平方根为8,不在遍历范围内,所以power=2的场景下直接漏掉了正确的大根结果。
修改方案
你可以选择以下任意一种方案调整:
方案1:优先遍历小幂次(效率更高)
因为幂次越小根越大,优先遍历更小的power,找到匹配项直接返回即可,同时动态调整root的遍历上限,不要硬编码范围:
n = 64 answer = None # 从小到大遍历power,优先找小幂次对应的大根 for power in range(2, 6): root = 2 while True: current_val = root ** power if current_val == n: answer = (root, power) break elif current_val > n: break root += 1 if answer is not None: break root, power = answer print('The root', root, 'and power =', power, 'equals', n)
方案2:全匹配后筛选最大根(兼容性更强)
如果担心遍历顺序影响结果,可以先收集所有符合条件的(root,power)对,再按根的大小排序取最大值,遍历顺序不影响最终结果:
n = 64 candidates = [] for power in range(2, 6): root = 2 while True: current_val = root ** power if current_val == n: candidates.append((root, power)) break elif current_val > n: break root += 1 # 按根倒序排序,取第一个就是最大根 candidates.sort(reverse=True, key=lambda x: x[0]) root, power = candidates[0] print('The root', root, 'and power =', power, 'equals', n)
两种方案运行n=64时都会输出The root 8 and power = 2 equals 64,符合你的需求。
内容的提问来源于stack exchange,提问作者Rus
相关产品推荐
相关产品推荐

