📌  相关文章
📜  检查整数是否可以表示为两个半素数之和(1)

📅  最后修改于: 2023-12-03 15:26:47.270000             🧑  作者: Mango

检查整数是否可以表示为两个半素数之和

题目描述:给定整数n,判断其是否可以表示为两个半素数之和,即两个质数的和。

示例输入:n = 26

示例输出:True (因为26可以表示为13 + 13)

解题思路

判断一个数n是否为两个半素数之和的问题,可以通过暴力枚举所有小于等于n/2的素数p和n-p是否同时成立来解决。如果同时成立,则n可以表示为两个半素数之和。

Python代码实现如下:

def is_prime(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 is_half_prime(num):
    """
    检查是否是半素数
    """
    # 找到所有小于等于num的质数
    primes = [i for i in range(num+1) if is_prime(i)]
    # 暴力枚举所有组合
    for i in range(len(primes)):
        if is_prime(num-primes[i]):
            return True
    return False
测试

我们来测试一下我们的代码是否正确

assert is_half_prime(25) == True
assert is_half_prime(26) == True
assert is_half_prime(27) == False
assert is_half_prime(53) == True
assert is_half_prime(54) == False
性能

我们来测试一下n=10000时的运行时间

import time
start = time.time()
is_half_prime(10000)
end = time.time()
print("运行时间:", end-start)

输出结果为:运行时间:3.522731780999756

可以看出,暴力枚举的时间复杂度为O(n^2),在n较大时运行时间会很长,可能需要考虑其他算法或优化方案。