Введение / История
В недавней дискуссии в крипто-чате мне было предложено обсудить / помочь с тестом примитивности Ферма и числами Кармайкла. Этот тест основан на предпосылке, a^(p-1) mod p==1
которая всегда будет выполняться для простых чисел p
, но не всегда для композитов. В настоящее время ряд Кармайкл, по существу тест злейший враг Ферма: Номер , для которого вы должны выбрать , a
чтобы быть не совместно с премьер p
получить a^(p-1) mod p!=1
. Теперь, если a
не взаимно простое число, вы, по существу, нашли нетривиальный факторp
и как мы все знаем, факторинг может быть довольно сложным. Особенно если все факторы достаточно велики. Теперь вы можете понять, почему тест Ферма не используется на практике так часто (ну, есть лучшие алгоритмы), потому что есть числа, для которых вам, как защитнику (с точки зрения безопасности), придется выполнить такой же объем работы, как атакующий (а именно фактор числа).
Итак, теперь, когда мы знаем, почему эти числа несколько интересны, мы сгенерируем их как можно быстрее, поэтому мы можем просто запомнить генерирующий код, если он нам понадобится!
Числа Кармайкла также известны как A002997 в OEIS .
Уже есть связанная проблема , но записи оттуда не конкурентоспособны, потому что они оптимизированы для скорости, а не для размера. Тот же аргумент верен и в обратном направлении: записи здесь, скорее всего, сделают компромисс против скорости в пользу размера.
Спецификация
вход
Это стандарт последовательностьвызов, поэтому вы берете положительное или неотрицательное целое число в n
качестве входных данных. n
может быть 0- или 1-индексирован, как вы предпочитаете (пожалуйста, укажите).
Вывод
По вашему выбору вы получите либо n
число с номером 1, либо число с n
номером 1, которое вы предпочитаете (укажите).
Спецификация
Целое число 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