はじめに/背景
で、最近の議論で暗号チャット私は議論するために/のヘルプ挑戦されたフェルマー素数判定テストとカーマイケル数を。このテストは、a^(p-1) mod p==1
常に素数に当てはまるがp
、常にコンポジットには当てはまらないという前提に基づいています。カーマイケル番号は、基本的にはフェルマートのテストで最悪の敵です。取得するために同時に素数にならないように選択a
する必要がある番号です。が共素数でない場合、本質的には、自明ではない因子を見つけましたp
a^(p-1) mod p!=1
a
p
そして、誰もが知っているように、因数分解は非常に難しい場合があります。特に、すべての要素が十分に大きい場合。これで、Fermatテストが実際にはあまり使用されない理由がよくわかります(より優れたアルゴリズムがあります)。これは、(セキュリティの観点から)防御者としてのあなたが同じような量の作業を行わなければならない数があるためです。攻撃者(つまり、数を因数分解します)。
これらの数値が魅力的である理由がわかったので、可能な限り最短の方法で数値を生成します。必要に応じて、生成したコードを記憶することができます。
カーマイケル番号は、OEISではA002997としても知られています。関連する課題はすでに
ありますが、サイズではなく速度が最適化されているため、ここからのエントリは競争力がありません。同じ議論が逆の方向にも当てはまり、ここのエントリはサイズを優先して速度とトレードオフをする可能性があります。
仕様
入力
これは標準のシーケンスチャレンジなので、正または負でない整数n
を入力として使用します。n
必要に応じて、0または1のインデックスを付けることができます(指定してください)。
出力
出力は、必要にn
応じて、-番目のカーマイケル番号または最初のn
カーマイケル番号のいずれかになります(指示してください)。
仕様
整数x
は、x
が複合である場合にのみカーマイケル数であり、のすべての整数y
についてgcd(x,y)=1
、それを保持しy^(x-1) mod x==1
ます。
誰が勝ちますか?
これはcode-golfなので、バイトで最短のコードが優先されます!
標準のIOと抜け穴のルールが適用されます。
テストケース
最初のいくつかのカーマイケル番号は次のとおりです。
561,1105,1729,2465,2821,6601,8911,10585,15841,
29341,41041,46657,52633,62745,63973,75361,101101,
115921,126217,162401,172081,188461,252601,278545,
294409,314821,334153,340561,399001,410041,449065,
488881,512461