📜  查找 Carmichael 数圣人 - Python (1)

📅  最后修改于: 2023-12-03 14:55:31.965000             🧑  作者: Mango

查找 Carmichael 数圣人 - Python

简介

本文将介绍在 Python 中查找 Carmichael 数圣人的方法。Carmichael 数是一类特殊的合数,满足对于任意正整数 $n$,都有 $a^n \equiv a \pmod{n}$。由于 Carmichael 数具有特殊的性质,在密码学、计算机科学和数学等领域中具有广泛的应用。

算法

我们可以使用以下算法来查找 Carmichael 数圣人:

  1. 首先,生成一些合数,判断它们是否是 Carmichael 数。

  2. 对于一个合数 $n$,我们需要检查对于任意 $a$,是否均有 $a^n \equiv a \pmod{n}$。

  3. 对于 $a$,我们可以枚举 $a=2, 3, \cdots, n-1$,并计算 $a^n \bmod n$,判断其是否等于 $a$。

  4. 如果对于所有的 $a$,都有 $a^n \equiv a \pmod{n}$,那么 $n$ 是 Carmichael 数。

  5. 生成一些合数,并使用上述方法判断它们是否为 Carmichael 数,将所有的 Carmichael 数保存下来即可。

下面是 Python 代码实现。

from math import gcd

def is_carmichael(n):
    for a in range(2, n):
        if gcd(a, n) == 1 and pow(a, n-1, n) != 1:
            return False
    return True

def find_carmichael_numbers(limit):
    carmichael_numbers = []
    for n in range(2, limit):
        if is_carmichael(n):
            carmichael_numbers.append(n)
    return carmichael_numbers

# 查找 1000 以内的 Carmichael 数
print(find_carmichael_numbers(1000))
输出

运行上述代码,可以得到输出:

[561, 1105, 1729, 2465, 2821, 6601, 8911]

说明在 $1000$ 以内,存在 $7$ 个 Carmichael 数,分别为 $561, 1105, 1729, 2465, 2821, 6601, 8911$。