Python编程PTA题解——验证“哥德巴赫猜想”

Description:数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。
Input:输入仅一行,输入一个(2, 2 000 000 000]范围内的偶数N。
Output:输出仅一行,按照格式“N = p + q”输出N的素数分解,其中p ≤ q均为素数。又因为这样的分解不唯一(例如24还可以分解为7+17),要求必须输出所有解中p最小的解。
Sample Input:24
Sample Output:24 = 5 + 19

本题最容易出现的问题是运算超时,所以我们应对算法进行优化
第一个优化:判断素数的时候,将循环范围缩小,将终点数进行开方,开方应用math的sqrt函数缩短开方时间
第二个优化:判断分解的两个数是否为素数使,用 n - i 来代表第二个数,这样可以减少一个循环提高效率

import math
def prime(p):
    for i in range(2, int(math.sqrt(p)) + 1): #一
        if p % i == 0:
            return False
    return True
n = int(input())
for i in range(2, int(n / 2) + 1):
    if prime(i) and prime(n - i):  #二
        print(n, "=", i, "+", n - i)
        break

你可能感兴趣的:(PythonPTA题解)