Python编写prime_partition函数实现指定数量无重复素数拆分对
素数拆分函数修正方案
原代码问题分析
- 数量控制逻辑错误:原代码中
while len(result) >=k: break仅能跳出while本身,无法终止外层for循环,且打印逻辑放在循环内部,会反复输出中间结果,也没有指定返回值。 - 逆序重复问题:循环遍历范围覆盖了1到n的全部区间,当i超过n/2时,就会生成和前半段逆序的重复素数对。
修正后代码
# 素数判断工具函数,如已有实现可直接忽略 def isprime(num): if num < 2: return False for i in range(2, int(num ** 0.5) + 1): if num % i == 0: return False return True def prime_partition(n, k): result = [] # 遍历上限设为n//2,保证i <= n-i,避免逆序重复 for i in range(2, n // 2 + 1): if isprime(i) and isprime(n - i): result.append([i, n - i]) # 收集到指定数量后直接终止循环 if len(result) >= k: break return result
调用效果
输入prime_partition(100, 6)将返回:[[3, 97], [11, 89], [17, 83], [29, 71], [41, 59], [47, 53]]
完全符合仅返回6组无重复素数对的需求。
内容的提问来源于stack exchange,提问作者hwanju song
相关产品推荐
相关产品推荐

