📜  打印所有数量少于其的Prime Quadruplet(1)

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

打印所有数量少于其的Prime Quadruplet

介绍

本程序用于打印所有数量少于其的Prime Quadruplet。一个Prime Quadruplet是一组由四个质数组成的数字序列,且相邻的差都是三。

例如:{5, 11, 17, 23}就是一组Prime Quadruplet。

算法

本程序使用了筛法和判断质数的方法。

首先使用筛法求出2 ~ MAX 这个区间的所有质数。然后,枚举每一个质数 p,并找到小于 p 的最大质数 q,计算差值 d = p - q 是否等于 6。

如果 d 等于 6,则继续找比 p 多 2 的质数 r,看其是否满足 r = q + 6 和 p + 6。如果是,则我们找到了一组Prime Quadruplet。

经过这样的处理后,我们会得到所有的Prime Quadruplet。

代码

以下是 Python 3 的代码实现:

MAX = 1000000


def sieve_of_eratosthenes():
    is_prime = [True] * (MAX + 1)
    is_prime[0], is_prime[1] = False, False

    for i in range(2, int(MAX ** 0.5) + 1):
        if not is_prime[i]:
            continue
        for j in range(i * i, MAX + 1, i):
            is_prime[j] = False

    return [i for i in range(2, MAX + 1) if is_prime[i]]


def print_prime_quadruplets():
    primes = sieve_of_eratosthenes()
    for i, p in enumerate(primes):
        if i < 3:
            continue
        q = primes[i - 1]
        r = primes[i - 3] if i > 3 else 0
        d1, d2 = p - q, q - r
        if d1 == 6 and d2 == 6:
            print(f"Prime Quadruplet: {r}, {q}, {p}, {p + 6}")


if __name__ == '__main__':
    print_prime_quadruplets()

代码片段为Python 3,使用了两个函数:

  • sieve_of_eratosthenes() 用于求解区间 2 ~ MAX 内的所有质数;
  • print_prime_quadruplets() 用于找到所有的Prime Quadruplet并打印。