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()

© 2022 刘士. All rights reserved.

结果匹配 ""

    没有匹配的结果 ""