📜  没有奇数质数的质数之和(1)

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

没有奇数质数的质数之和

这个问题可以用编程来解决。我们可以编写一个程序,计算出所有满足条件的质数并将它们相加。在这个程序中,我们需要用到一些数学知识。

质数

质数是只能被 1 和它本身整除的正整数。例如,2、3、5、7、11 等都是质数。我们可以用代码来判断一个数是否为质数:

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

这个函数接受一个数字作为参数,如果这个数字是质数则返回 True,否则返回 False。

奇数质数

我们知道奇数除了 2 以外都是奇数,所以奇数质数就是除了 2 以外的质数。我们可以写一个函数来计算小于等于一个给定数字的所有奇数质数:

def odd_primes(limit):
    primes = [2]
    for i in range(3, limit+1, 2):
        if is_prime(i):
            primes.append(i)
    return primes

这个函数接受一个数字作为参数,返回所有小于等于这个数字的奇数质数。

没有奇数质数的质数之和

现在我们可以编写一个函数来计算没有奇数质数的质数之和了:

def sum_of_primes_with_no_odd_primes(limit):
    primes = odd_primes(limit)
    sum_of_primes = 0
    for i in range(2, limit+1):
        if all(i % p != 0 for p in primes):
            sum_of_primes += i
    return sum_of_primes

这个函数接受一个数字作为参数,返回小于等于这个数字的所有没有奇数质数的质数之和。它首先调用 odd_primes 函数得到小于等于这个数字的所有奇数质数,然后遍历所有小于等于这个数字的质数,如果这个质数不能被任何一个奇数质数整除,则将它们相加。

示例

我们可以对这个函数进行一些测试:

assert sum_of_primes_with_no_odd_primes(10) == 17
assert sum_of_primes_with_no_odd_primes(20) == 77
assert sum_of_primes_with_no_odd_primes(50) == 803

sum_of_primes_with_no_odd_primes(10) 返回 17,因为只有 2、3、5 是质数且没有其他奇数质数因子的质数,它们的和是 2 + 3 + 5 = 17。

所以,我们可以使用这个函数来得出任何小于等于给定数字没有奇数质数的质数之和。