Хорошо известно, что нечетные простые числа появятся в треугольнике Паскаля ровно дважды. Однако не все числа, которые появляются ровно дважды в треугольнике Паскаля, являются простыми. Мы будем называть эти числа простыми числами Паскаля.
Простые числа Паскаля - это составные числа, которые появляются ровно дважды в треугольнике Паскаля. Первые несколько простых чисел Паскаля
4, 8, 9, 12, 14, 16, 18, ...
Ваша задача - взять положительное целое число n в качестве входных и выходных значений true или false, в зависимости от того, является ли n простым числом Паскаля или нет. Это код-гольф, поэтому выигрывает самая короткая программа!
Ответы:
Wolfram Language (Mathematica) , 45 байт
Попробуйте онлайн!
Каждое составное число n появляется ровно дважды в строке n и не может появиться впоследствии. Таким образом, условием для простых чисел Паскаля является то, что они вообще не появляются в первых n-1 строках.
Насколько я могу судить, это короче, чем проверка того, что он появляется ровно дважды в первых n строках, и возможность использовать
!PrimeQ
вместо этого.источник
Python 2 , 93 байта
Попробуйте онлайн!
Это именованная функция f , которая выводит через код выхода , 0 для простых чисел Паскаля, 1 в противном случае.
Как это работает?
Это в основном проверяет, встречается ли n в первых n - 1 строках треугольника Паскаля или является ли оно простым, и выдает ошибку, если выполняется любое из этих двух условий.
Сохранено 1 байт благодаря ovs .
источник
Желе ,
11109 байтБлагодаря:
’
(+1), избегайте использованияn2
(-2), поэтому -1 в целом.Попробуйте онлайн!
Альтернативный подход , Джонатан Аллан . (недостатки)
Пояснение к последней строке:
n
появляется дважды в треугольнике Паскаля» эквивалентно «n
не появляется в первыхn-1
строках».true
если число не простое (то естьÆP == 0
), а количествоc
равно нулю. Из этого мы можем вывести этоÆP == c
.Можно доказать, что если они равны, то они равны 0, потому что:
ÆP
вернуть логическое значение, которое может быть только 0 или 1.n
это простое число, поэтому он не может появиться в первыхn-1
строках (то есть,c == 0
)источник
1
не простое число Паскаля; это говорит, что это так.Ḷc€ḶFċoÆP¬
будет работать, я думаю.ċ=ÆP
должно сработать.Ḷcþ`Fċ=ÆP
тоже должно работать.Haskell ,
8684 байтаПопробуйте онлайн!
объяснение
Функция
p
рекурсивно определяет вырожденный треугольник Паскаля:Как мы видим (это решение
1
несколько особенное), каждое числоn
появляется ровно дважды вn+1
строке th, а все элементы последующих строк толькоn
увеличиваются , поэтому нам нужно только проверить, находится ли где-то доn
строки th, чтобы увидеть, элемент дисквалифицирован:Теперь у нас есть
True
все элементы , которые появляются более чем в два раза ( за исключение1
), поэтому все , что нам нужно, чтобы иметь дефектнуюisPrime
функцию , которая возвращаетTrue
для1
:источник
APL (Dyalog) ,
44342419 байтов5 байтов сохранено благодаря @Cowsquack
Попробуйте онлайн!
Как?
Мы уверены, что ни один не делает
⍳
- диапазон0
..n-1
,⍳∘.!
- на декартовом биноме с самим собой⊢∊
- содержатьn
,⍱
- и не делает⊢|⍨
-n
по модулю каждого элемента2↓⍳
- диапазон2
..n-1
~0∊
- не содержать0
(или неделимый)источник
(∨/1↓1≠⊢∨⍳)∧(~⊢∊⍳∘.!⍳)
короче на два байта(0∊⊢|⍨2↓⍳)∧∘~⊢∊⍳∘.!⍳
еще два я изменил алгоритм проверки простоты~
дает(~0∊⊢|⍨2↓⍳)⍱⊢∊⍳∘.!⍳
на один байт меньше.JavaScript (Node.js) ,
103101 байтПопробуйте онлайн!
источник
n=>(r=x=>[...Array(n).keys(F=n=>n>0?n*F(n-1):1)].every(x))(i=>r(j=>F(i)/F(j)/F(i-j)-n))>F(n-1)**2%n
Ториори работает, но на самом деле для небольшого радиусаРубин ,
9795 байтПопробуйте онлайн!
Соскребли пару байтов.
источник
R , 55 байт
Попробуйте онлайн!
sum(!n%%1:n)>2
является составным тестом иouter(1:n-1,1:n,choose)
вычисляет строки0
вn-1
треугольнике Паскаля, поэтому мы должны убедиться, чтоn
они там не отображаются.источник
05AB1E , 10 байтов
Попробуйте онлайн!
объяснение
Проверки, которые
n
встречаются ровно дважды в первых n + 1 строках треугольника паскалей и не являются простыми.Сравнение работает, так как в треугольнике нет простых чисел, которые могут встречаться 3 раза.
источник
Haskell , 90 байт
Попробуйте онлайн!
источник
Pyth , 10 байт
Попробуйте онлайн! или проверьте набор тестов.
источник
JavaScript (Node.js) ,
79133130128 байтПопробуйте онлайн!
злой премьер чекер +50 байт :(
источник
Python 2 ,
105104 байтаспасибо пользователю 202729 за -1 байт
Попробуйте онлайн!
источник
p+r
кажется излишней ...