Вступ / Довідка
У нещодавній дискусії в крипто-чаті мені поставили виклик обговорити / допомогти з тестом на первинність Ферма та номерами Кармайкла. Цей тест ґрунтується на передумові, яка a^(p-1) mod p==1
завжди буде мати право для прайметів p
, але не завжди для композитів. Тепер номер карикатури - це, по суті, найгірший ворог тесту Ферма: Число, для якого вам доведеться вибрати, a
щоб не бути спільним p
для проживання a^(p-1) mod p!=1
. Тепер, якщо a
це не є основним, ви, по суті, знайшли нетривіальний факторp
і, як ми всі знаємо, факторинг може бути досить важким. Особливо, якщо всі фактори досить великі. Тепер ви можете зрозуміти, чому тест Ферма не використовується на практиці так часто (ну, є кращі алгоритми), це тому, що є цифри, для яких вам, як захиснику (з точки зору безпеки), доведеться виконати аналогічну кількість роботи зловмисник (а саме коефіцієнт числа).
Отже, тепер, коли ми знаємо, чому ці цифри є дещо захоплюючими, ми збираємо їх якомога коротшим способом, тому ми можемо просто запам'ятати генеруючий код, якщо він нам коли-небудь знадобиться!
Номери Carmichael також відомі як A002997 на OEIS . Вже
є виклик, пов'язаний з цим , але записи тут не є конкурентоспроможними, оскільки вони оптимізовані для швидкості на відміну від розміру. Той самий аргумент справедливий і для зворотного напрямку, записи тут, ймовірно, можуть робити компроміси проти швидкості на користь розміру.
Специфікація
Вхідні дані
Це стандарт послідовністьвиклик, тому ви берете позитивне чи негативне ціле число n
як вхідне. n
може бути 0- або 1-індексованим, як вам зручніше (вкажіть).
Вихідні дані
Вашим результатом буде або номер n
-номер карикатури, або перші n
номери карміхале, як вам зручніше (вкажіть).
Специфікація
Ціле число x
є числом Кармайкл тоді і тільки тоді x
є складовим і для всіх цілих чисел y
з gcd(x,y)=1
, він вважає , що y^(x-1) mod x==1
.
Хто виграє?
Це є код-гольф, тому найкоротший код у байті виграє!
Застосовуються стандартні правила вводу-виводу та лазівки.
Випробування
Перші кілька номерів карміхалей:
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