Python 练习
1. 题目
哥德巴赫猜想说是说,任何一个超过 2 的偶数都可以写成两个素数之和
例如,4=2+2,8=5+3 等。
本例要求根据用户输入的偶数找出其素数和的分解形式
2. 分析
一个简单的方法的,对于输入的偶数 N,找出其所有分解,逐一验证每一个满足 N=k1+k2 的分解中 k1 和 k2 是否都是素数。
比如对于数字 12,验证分解(2,10),(3,9)、(4,8)、(5、7)、(6,6)中有没有两个数都是素数的情形。
如果有,哥德巴赫猜想该数就是成立的。
这种算法对于只验证一个数字 N 的所有分解的情形是合适的。
但对于需要验证多个偶数 N 的情形效率欠佳。
比如需要验证 10、12、16 三个数,它们有分解 5+5、5+7、5+11,这样验证这几个分解时就要判断 5 是不是素数,重复的运算会很多。
本案例采用另一种思路,首先建立一个素数表,该素数表要足够长,可以覆盖偶数 N 所有分解中可能遇到的素数。
而后考察 N 的每个分解,看看分解出来的两个数是否都包含在素数表中,若是,则找到一种素数分解。
3. 实例
def main():
# 输入待验证的偶数
N = int(input("请输入待验证的偶数:"))
while N < 3 or N % 2 == 1:
print("输入的数不符合要求")
N = int(input("请输入待验证的偶数n(n>2):"))
# 生成素数表
Prime = set()
for i in range(2, N + 1):
Prime.add(i)
for i in range(2, N + 1):
if i in Prime:
for k in range(2 * i, N + 1, i):
if k in Prime:
Prime.remove(k)
# 验证该偶数能否分解为两个素数之和
for e in Prime:
f = N - e
if f >= e and f in Prime:
print(N, '=', e, '+', f)
main()