Пиллаи простое простое число , для которых существует некоторый положительный такое , что и .
Другими словами, целое число является простым Пиллаи , если это простое число , если существует еще одно натуральное число т такое , что факториала из м , плюс 1 делится на р и если р - 1 не делится на т .
Учитывая положительное целое число в качестве входных данных, решите, является ли это простое число Пиллаи. Последовательность простых чисел Пиллаи OEIS A063980 .
Например, - простое число Пиллаи, потому что:
- Это простое число, имеющее только 2 фактора.
- и m = 18 удовлетворяют вышеуказанным условиям: 23 ∣ ( 14 ! + 1 ) и 14 не делит 22 ; итоже не делят.18 22
Контрольные примеры
Truthy:
23 59 83 109 139 593
Falsy:
5 7 8 73 89 263 437
Для случаев truthy, соответствующих M «s являются [(23, [14, 18]), (59, [15, 40, 43]), (83, [13, 36, 69]), (109, [86]), (139, [16]), (593, [274])]
.
Вы можете либо следовать стандартному формату вывода проблемы решения (то есть значениям истинности / ложности), либо иметь непротиворечивое значение для простых чисел Пиллаи и непоследовательное значение в противном случае, или наоборот .
Вы можете соревноваться на любом языке программирования и можете принимать и выводить данные любым стандартным методом , при этом отмечая, что эти лазейки по умолчанию запрещены. Это код-гольф , поэтому выигрывает самое короткое представление (в байтах) для каждого языка .
источник
[(23, 14), (23, 18), (59, 15), (59, 40), (59, 43), (83, 13), (83, 36), (83, 69), (109, 86), (139, 16), (593, 274)]
. Я также добавил их к вызову.Ответы:
Python 2 ,
115111110109 байт-6 байт благодаря мистеру Xcoder
Попробуйте онлайн!
Функции состоят из двух частей,
~-n%x<1or~f(x)%n>0
которые проверяют, еслиn
не удовлетворяет «условиям Пиллаи», иn%x>0
для первичной проверки.После этого
all
применяются к обеим пунктам, первый элемент будет содержатьFalse
/0
если есть действительный «Пиллаи номер», а второй будет содержатьTrue
/ ,1
еслиn
первично.Они передаются тому,
cmp
что вернется-1
в этом кенарио (это действительное простое число Пиллаи). Другие комбинации[[0, 0], [1, 0], [1, 1]]
вернутся0
или1
источник
Желе ,
118 байтВозвращает 0 для простого Пиллаи, 1 в противном случае.
Попробуйте онлайн!
Как это устроено
источник
Par / GP , 44 байта
Попробуйте онлайн!
источник
Брахилог , 19 байт
Попробуйте онлайн!
Довольно простой перевод вопроса:
источник
J ,
3026 байт-4 байта благодаря FrownyFrog
Попробуйте онлайн!
Объяснение:
источник
1~:|
для сохранения 2 байтов.(]|1+!@[)
просто(|1+!)~
~
и это имеет смысл с вашим предыдущим комментарием.Python 2 ,
65645352 байтаВывод через наличие или отсутствие ошибки.
Попробуйте онлайн!
источник
Python 2 ,
109107 байтПопробуйте онлайн!
объяснение
l
Находит факториал числа принятого в, так5
как входные возвращается120
.В
all(p%i for i in range(2,p-1))
проверяет , является ли число простым, мы игнорируем 0 и 1 , как наши другие условия уже исключают те вне.Наконец, мы используем,
any(~-p%m>-~l(m)%p==0for m in range(2,p))
чтобы перебрать все потенциальные m, чтобы посмотреть, удовлетворяет ли какой-либо из наших потребностей.~-p
значитp+1
. Затем мы проверяем, является ли оно больше чем-~l(m)%p
(что переводится как(m!-1)%p
, и затем мы сравниваем его с0
. В основном~-p%m
должно быть больше 0 и-~l(m)%p
должно быть 0.источники
улучшения
источник
как вы, вероятно, можете видеть из ссылки tio, не все случаи проходят, потому что js не может обрабатывать большие числа, если такое требование существует, попробуйте выполнить его :)
Существует двойная проверка
F%n>n-2&(F+1)%n<1
для предотвращения ложных срабатываний (но не в случае больших проблем с js, мы действительно нуждаемся(F+1)%n<1
в меньших числах, которые уменьшают число байтов решения до 60JavaScript (Node.js) ,
9088867268 байтПопробуйте онлайн!
источник
Брахилог , 13 байт
Попробуйте онлайн!
Успешен для простых чисел Пиллаи, обеспечивая наименьшее m через выходную переменную, и завершается неудачей для чего-либо еще. Поскольку большая часть того, как это экономит байты по сравнению с решением sundar, заключается в том, что он многократно вычисляет простые факторизации некоторых довольно больших чисел, это довольно невероятно медленно для больших входных данных. (Вероятно, я буду запускать эти случаи на моей локальной установке Brachylog, когда мой ноутбук не работает от батареи.)
источник
[Perl], 45 байт
Модуль теории чисел имеет предикаты как встроенные функции (is_pillai фактически возвращает либо 0, либо наименьшее m, поэтому также решает A063828). Базовый код C и Perl не разыгрывается (конечно). Код C выглядит так:
(обычно заменяют UV на uint64_t или аналогичный, и HALF_WORD решает, можем ли мы оптимизировать mulmod в простые нативные операции).
Чистый код Perl похож на:
источник
C (gcc) , 64 байта
Попробуйте онлайн!
источник
Whispers v2 , 230 байт
Попробуйте онлайн!
Это возвращает пустой список для простых чисел Pillai, и непустой список в противном случае.
Как это устроено
Whispers был разработан для манипулирования действительными / комплексными числами, с небольшим количеством команд массива, добавленных для хорошей меры, следовательно, многократное использование
Each
для итерации по сгенерированным спискам.Немного предыстории о Whispers:
Шепот немного отличается по пути выполнения от большинства других языков. Вместо того, чтобы работать по каждой строке линейно, только с ветвлением в условных выражениях, Whispers начинается с последней строки в файле, начинающейся с
>
(правила немного сложнее, но это все, что нам нужно знать на данный момент), и значения чисел различаются в зависимости от того, начинается ли строка с>
или>>
.Если строка начинается с
>
, например,> 1
или> Input
, это постоянная строка - она каждый раз возвращает одно и то же значение. Здесь числа представляют их числовую форму, поэтому первая строка всегда будет возвращать 1 при вызове.Однако, если строка начинается с
>>
, числа обрабатываются как ссылки на другие строки, вроде вызовов функций, если хотите. Например, в строке>> 1…2
это не выполняет…
команду для целых чисел 1 и 2 , а скорее для значений, возвращаемых из строк 1 и 2 . В этом случае эти значения являются целым числом 1 и любым целым числом, которое мы передаем в качестве входных данных.Для этого примера давайте рассмотрим ввод 23 . Имейте в виду, что из-за предварительной обработки Whispers вторая строка (
> Input
) преобразуется в> 23
.Наша первая команда в строке 3:
>> 1…2
.…
является диадическим диапазоном, в данном случае от 1 до 23 , что дает {1, 2, ... 22, 23} . Далее перейдем к строкам с 9 по 12 :Здесь у нас есть 4 последовательных
Each
оператора, каждое из которых повторяется по предыдущему результату, по существу отображая 4 команды в массиве в строке 3 : диапазон. Первые три утверждения - это простые карты со строками 4 , 5 и 6 :Эти три команды над целым числом n дают (n! +1) ∣x , где ! обозначает факториал , ∣ обозначает делимость, а х - вход. Наконец, строка 12 имеет структуру двоичной карты .
Диадическая карта структура занимает три целых числа: цель, левые и право, каждый из индексов других линий. Здесь мы сжимаем влево и вправо, чтобы создать список пар, а затем сокращаем каждую пару с помощью диадической команды (цель). Здесь, если ввод 23 , списки {1, 2, ... 22, 23} и {0, 0, ... 1, 0} и команда
который умножает левый аргумент на правый. Это создает массив целых чисел, с 0 по индексам целых чисел, чьи факториалы увеличиваются, не делятся на входы и исходный индекс, где они находятся. Мы будем называть этот массив A . Затем мы удаляем 0 с из A , беря разницу между {0} и A :
В нашем примере ввода это дает набор {14, 18, 22} . Затем мы берем остаток от входных данных, деленных на каждое значение в наборе, и проверяем, не равен ли этот остаток 1 :
Опять же, у нас есть список из 0 или 1 с, и нам нужно удалить 0 с и заменить 1 с исходными значениями. Здесь мы повторяем код, который мы видели выше, но
>> 18∖13
вместо12
. Наконец, мы приводим этот результирующий набор к списку для окончательной проверки. К сожалению, наш код также должен отклонять составные числа, которые соответствуют всем этим критериям, например 437 . Таким образом, мы добавляем нашу последнюю проверку, умножая наш окончательный список на простоту ввода. Из-за того, как умножение Python работает со списками, 0 заменяет его пустым списком, а 1 не имеет никакого эффекта. Таким образом, мы рассчитываем простоту ввода, умножьте это на список мs для ввода и вывода окончательного результата:источник
APL (NARS), 65 символов, 130 байтов
Здесь 23x это будет означать 23r1 и, следовательно, дробь 23/1, то есть все остальные; тестовое задание:
источник
C # (интерактивный компилятор Visual C #) , 138 + 22 = 160 байт
TIO не реализовала библиотеку System.Numerics в своем выпуске Mono, поэтому вы можете увидеть результаты.
Попробуйте онлайн!Вот вместоОбъяснение:
источник
CJam , 37 байт
Выходные данные,
11
если input - это простое число, иначе00
,01
или10
Объяснение:
Попробуйте онлайн!
источник