Вступ / Довідка
У нещодавній дискусії в крипто-чаті мені поставили виклик обговорити / допомогти з тестом на первинність Ферма та номерами Кармайкла. Цей тест ґрунтується на передумові, яка 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