Вызов:
Для заданного числа возьмите наибольшее простое число строго меньше его, вычтите его из этого числа, сделайте это снова для этого нового числа с наибольшим простым числом, меньшим его, и продолжайте делать это до тех пор, пока оно не станет меньше 3. Если оно достигнет 1, ваше программа должна вывести истинное значение, иначе программа должна вывести значение фальси.
Примеры:
Все это должно дать истинное значение:
3
4
6
8
10
11
12
14
16
17
18
20
22
23
24
26
27
29
30
32
34
35
37
38
40
41
42
44
46
47
48
50
Все это должно давать ложные значения:
5
7
9
13
15
19
21
25
28
31
33
36
39
43
45
49
Правила:
- Вы можете написать программу или функцию.
- Вы можете предположить, что вход больше 2.
- Применяются стандартные лазейки
- Это код-гольф, поэтому выигрывает самый короткий ответ!
9/10
as2^(-1) 3^2 5^(-1)
, думает в терминах последнего)Ответы:
Желе ,
98 байтПопробуйте онлайн! или проверьте все контрольные примеры .
Как это работает
источник
Сетчатка , 31 байт
Отпечатки
0
(ложные) или1
(правдивые).Попробуйте онлайн! (Первая строка включает набор тестов, разделенных переводом строки.)
объяснение
Преобразовать ввод в унарный, превратив ввод
N
вN
копии1
.Повторно удаляйте наибольшее простое число меньше, чем входное. Это основано на стандартном тесте простоты с регулярным выражением .
Проверьте, является ли результат единичным
1
.источник
Pyth,
181514 байтовСпасибо @Maltysen за -1 байт
Программа, которая принимает данные на STDIN и печатает
True
или,False
если необходимо.Попробуйте онлайн
Как это работает
Старая версия с уменьшением, 18 байт
Попробуйте онлайн
Как это работает
источник
St
этоU
15 символовJavaScript (ES6),
6463 байтаСохранено 1 байт благодаря @Neil
Я написал это за 2 минуты ... и это сработало отлично с первого раза. Первый пользователь, чтобы найти неизбежную ошибку, побеждает ....
Попробуйте это
Показать фрагмент кода
Как это работает
Сначала мы определяем g (x) как функцию, которая находит первое простое число p <= x . Это делается с помощью следующего процесса:
Решение этой задачи, f (x) , теперь довольно простое:
источник
too much recursion
на консоль браузера в Firefox 48, так что я думаю, что рекурсия превышает предел рекурсии FF.x%2
должен сэкономить вам байтx==1
.Пайк,
1511 байтПопробуй это здесь!
Возвращает,
1
если true, и вызывает исключение, если falseисточник
Юлия, 32 байта
Хотя это не будет самым коротким решением среди языков, оно может быть самым коротким из понятных человеку ...
Или, говоря немного яснее
Вызывается, например, с
!37
.источник
Mathematica, 32 байта
Это безымянная функция, которая принимает целое число и возвращает логическое значение.
объяснение
Здесь много синтаксиса и забавного порядка чтения, так что ...
источник
#+0~Min~NextPrime@-#&~FixedPoint~#==1&
(36 байт). Хорошее использование//.
!<2
в конце.Python3,
102 92 90 8988 байтПредложения по игре в гольф приветствуются! Я вижу, что
gmpy
содержит функциюnext_prime
, но я пока не могу ее проверить :(-2 байта, спасибо @JonathanAllan !
-1 байт, спасибо @Aaron !
Testcases
Вывод 13 истинных значений и 13 ложных значений.
s
содержит правдивые случаи иh
ложь.источник
if all(x%y for...
работыn<3 else
->n<3else
чтобы получить ту же длину, что и у меня;)Python, с симптом, 60 байтов
Мой предыдущий метод составлял 83 байта без всяких сомнений с использованием рекурсии, но я взял истину / фальси, чтобы обозначить различимые и последовательные, но мне сообщили, что это неверная интерпретация. Я не могу спасти его из-за хвоста, но я оставлю это здесь на случай, если кто-то знает, как это сделать:
источник
2
это не фальшивая ценность.Vitsy,
2826 байтовЭто определенно можно сократить.
Попробуйте онлайн!
источник
MATL , 13 байт
Попробуйте онлайн! Или проверьте все тестовые случаи одновременно .
объяснение
источник
CJam ,
2116 байтСпасибо Деннису за сохранение 4 байта.
Попробуйте онлайн!
объяснение
источник
ri_{_1|{mp},W=-}*
должно сработать.1|
это действительно умно. :) (И я всегда забываю, что{...},
делает неявный диапазон ...)Perl, 42 байта
Включает +1 для
-p
Запустить с вводом на STDIN
reach1.pl
:Использует классическое регулярное выражение
источник
.NET Regex, 38 байт
Просто чтобы показать, что это можно проверить в одном регулярном выражении.
Ввод предполагается в унарном виде.
объяснение
Он просто реализует требование к слову, многократно удаляя наибольшее простое число и проверяя, равен ли остаток 1.
(?>(?<=(.*))..+(?<!^\1\2+(.+.)|$))+
Группа, не занимающаяся отслеживанием обратной связи, следит за тем, чтобы найденное нами наибольшее простое число не было переопределено, и+
просто повторяет процесс сопоставления наибольшего простого числа.(?<=(.*))..+(?<!^\1\2+(.+.)|$)
: Сопоставьте наибольшее простое число меньше оставшегося числа(?<=(.*))
: Запишите, сколько мы вычли, чтобы установить «опорную» точку для утверждения...+
: Искать наибольшее число ...(?<!^\1\2+(.+.)|$)
: ... который является простым и меньше, чем оставшееся число.(?<!^\1\2+(.+.))
: Обычная процедура первичного тестирования, с^\1
прикрепленным спереди, чтобы убедиться, что мы проверяем сумму, соответствующую..+
(?!<$)
: Утверждать меньше, чем оставшееся числоисточник
(?<=(.*))
Часть довольно неуклюже. Не уверен, что есть лучший способ. Кроме того, мне интересно, есть ли решение в PCRE.Perl 6 ,
54 53 5251 байтОбъяснение:
Пример:
источник
Нерегулярный , 63 байта
Я создал этот язык два дня назад, и основные предпосылки заключаются в том, что в нем нет встроенных циклов, единственными функциями являются базовая арифметика и принятие решений, а оценка программы основана на регулярных выражениях.
объяснение
Эта часть преобразует вход в унарный. Он многократно вычитает 1 из входного значения, пока не станет равным 0, добавляя
1_
каждый раз. Затем он удаляет все_
с. Если бы я не забылbreak
в своем коде, это можно записать так:Следующая часть многократно удаляет наибольшее простое число из входных данных, пока оно не станет равным
1
или11
с11
заменой на0
.Я использовал регулярное выражение из ответа Мартина Эндера .
источник
Haskell, 79 байтов
Не очень коротко, но бессмысленно :)
источник
PowerShell v2 +, 81 байт
Принимает участие
$n
. Входит вwhile
цикл, пока$n
он еще3
или больше. Каждая итерация вычитает число из$n
. Число - это результаты теста на регулярность регулярного выражения, примененного к диапазону с($n-1)..2
помощью оператораWhere-Object
(?
), затем первого[0]
из результатов (поскольку диапазон уменьшается, это приводит к выбору наибольшего). После завершения цикла,$n
будет или будет,1
или2
, по определению, поэтому мы предварительно уменьшаем$n
(превращаем его в либо0
или1
), и принимаем логическое значение -не!
его. Это осталось на конвейере и вывод неявный.Примеры
источник
Matlab, 51 байт
Это ОЧЕНЬ похоже на решение JS6 от ETHProductions , но необходимо, чтобы переменная была в рабочей области.
источник
Python 2.7:
8887 байтСпасибо @TuukkaX за -1 байт!
источник
n<2
вместоn==1
.Floroid ,
45 3029 байтисточник
Clojure, 125 байт
Yikes, это один длинный кусок кода. Самый многословный язык поражает снова!
Ungolfed:
источник