Напишите программу, которая проверит простоту указанного числа и выдаст вывод в виде логического значения (True - простое число). Ваш основной тест может (но не обязан) быть действительным для числа 1.
Вот подвох: ваша программа сама должна суммировать до простого числа. Преобразуйте каждый символ (включая пробелы) в его значение Unicode / ASCII ( таблица ). Затем сложите все эти числа вместе, чтобы получить сумму вашей программы.
Например, возьмем эту не очень хорошую программу, которую я написал в Python 3.3:
q=None
y=int(input())
for x in range(2,int(y**0.5)+1):
if y%x==0:
q=False
if not q:
q=True
print(q)
Если вы преобразуете все символы в соответствующие им значения Unicode / ASCII, вы получите:
113 61 78 111 110 101 10 121 61 105 110 116 40 105 110 112 117 116 40 41 41 10 102 111 114 32 120 32 105 110 32 114 97 110 103 101 40 50 44 105 110 116 40 121 42 42 48 46 53 41 43 49 41 58 10 32 32 32 32 105 102 32 121 37 120 61 61 48 58 10 32 32 32 32 32 32 32 32 113 61 70 97 108 115 101 10 105 102 32 110 111 116 32 113 58 10 32 32 32 32 113 61 84 114 117 101 10 112 114 105 110 116 40 113 41
Затем вы можете найти сумму этих чисел вручную или с помощью своей собственной программы. Эта конкретная программа суммирует 8293, что является простым числом.
Конечно, это Code Golf, поэтому чем меньше вы можете сделать свою программу, тем лучше. Как отмечают другие пользователи, эта программа не очень удачная.
Несколько правил:
Допустимые входные данные включают STDIN и подсказки (без функций, это просто способ добавить дополнительный дополнительный код). Пробелы разрешены, но только если они имеют решающее значение для функциональности вашей программы. Вывод должен быть выводом, а не просто храниться в переменной или возвращаться (используйте print, STDOUT и т. Д.)
Флаги могут быть использованы и должны учитываться буквально, а не расширяться. Комментарии не допускаются. Что касается не-ASCII символов, им следует присвоить значение в соответствующей кодировке.
Обязательно перечислите размер вашей программы и сумму программы. Я проверю, чтобы убедиться, что программы действительны.
Удачи!
Вот фрагмент кода для подсчета суммы вашей программы и проверки ее простоты:
Ответы:
Привет, мир! 13 байт,
1193
источник
Рубин, сумма 3373, 37 байт
источник
Microscript II, 2 байта (сумма 137)
Microscript II, 4 байта (сумма 353)
Я на самом деле очень удивлен, что оба из них оказались с байтовыми суммами.
источник
Japt , 2 байта,
191
U
:85
j
:106
Попробуйте онлайн!
источник
Pyth, 2 байта,
127
Попробуйте онлайн
Выходы
1
для простых чисел,0
для не простых чисел./
имеет кодовую точку47
.P
имеет кодовую точку80
.Как это работает:
источник
Haskell, 52 байта, 4421
Теорема Вильсона.
источник
::IO Int
самом деле не должно быть необходимости, если это не самый короткий способ получить простую сумму.Python 2, 50 байт,
4201
Работает для 1. Выход положительный, если простое, или ноль, если нет.
Попробуйте онлайн
Python 2, 44 байта,
3701
Не работает для 1. Выводит логическое значение.
Попробуйте онлайн
источник
JavaScript (ES6), 47 байт,
3541
Это в значительной степени основано на функции тестирования простоты ETHproductions , которую можно найти здесь .
источник
05AB1E , 2 байта,
173
Объяснение:
Попробуйте онлайн!
источник
PHP, 38 байт, сумма 2791
Интересный факт: если
$h
вместо$c
, сумма будет2801
(также простое число), и ее двоичное представление,101011110001
читаемое как десятичное, также будет простым числом.принимает аргумент командной строки, печать
1
или пустую строку. Беги с-r
.Код взят из моей собственной основной функции (посмотрите оригинальный пост, если можете).
источник
R, 27
32байта, сумма 22432609Сохранено 5 байт благодаря @rturnbull
Это использует функцию isprime библиотеки gmp.
источник
cat(!!gmp::isprime(scan()))
на 5 байт короче, и суммы2243
тоже простые.Python 2, 44 байта, байтовая сумма 3109
Это 44-байтовая реализация xnor с именами переменных с наименьшим значением, которые дают простую байтовую сумму.
Печатает,
1
если простые и0
если нет.источник
Желе 6 байт , байт-сумма 691
печатает,
1
если премьер и0
если нет.TryItOnline!
Байты в шестнадцатеричном формате
93 0D D5 2C CD 45
(см. Кодовую страницу ) или в десятичном виде представляют собой147 13 213 44 205 69
сумму, равную 691, что является простым числом .Как?
Æḍ
Функциональность таким образом, что простые числа и их отрицаний возвращать одно , а другие целые числа не (композитов и их отрицаний возвращают число больше , чем один, один и минус одного возврата ноль и ноль возвращается, как ни странно, минус один).Ṡ
Функциональность таким образом, что отрицательные числа возврата минус один, ноль возвращает ноль и целые положительные числа возвращают один.Таким образом, две функции возвращают одно и то же значение для простых чисел.
Обратите внимание, что 3-байтовая программа
ƓÆP
которая непосредственно проверяет, является ли входной сигнал из STDIN простым, к сожалению, не является программой с простой суммой (240).Проверка на равенство с использованием
=
(equals),e
(существует в) или⁼
(non-vectorizing equals) для 5 байтов также не дает программ с простой суммой.Альтернатива (возможно, не приемлемая) 4 байта, сумма 571
Если ограничения ввода / вывода все еще разрешают полные программы, которые принимают аргумент.
... используя тот же принцип, что и выше, где
⁼
равенство невекторизируется (аспект невекторизации не имеет никакого эффекта, так как в любом случае нечего векторизовать). Шестнадцатеричные значения -0D D5 8C CD
это13 213 140 205
десятичные числа, сумма которых равна 571, простое число.Еще раз отметим, что 2-байтовая программа
ÆP
не имеет простой суммы (93).источник
ƓÆPG
(311) иÆPF
(163) должно быть в порядке, я думаю?ƓÆḍ,ṠE
значения есть16183
, что по простому совпадению!ƓÆPG
ОК. Я также спросил, приемлема ли программа, принимающая ввод, а не использующая STDIN.ÆP¥
это 3 байта и 97.CJam , 4 байта, байтовая сумма 439
Использует встроенный тест на простоту.
Попробуйте онлайн!
Альтернативный раствор, 4 байта, сумма 461
источник
Mathematica, 21 байт,
1997
Input[]
читает строку ввода (из STDIN , если не используется передний конец, через диалоговое окно , если используется передний конец Mathematica),Print@*PrimeQ
представляет собой композицию (@*
) изPrint
иPrimeQ
функций, и@
является функцией префикса обозначения.источник
Perl 6 ,
2422 байта,1949
Все три пробельных символа обязательны.
(Perl 6 не волнует, что это за символы пробела, поэтому я выбрал новую строку вместо более часто используемого пробела для второго ...)
источник
Pyth, 4 байта,
367
Попробуй это здесь!
источник
Пип , 8 байт,
511
Я написал главный чекер, и сумма была простой. Удобный. Проверьте ввод 1-30: попробуйте онлайн!
объяснение
источник
Пари / GP , 23 байта,
2111
Попробуйте онлайн!
источник
J, 18 байт,
1103
Не далеко от оптимального, по крайней мере, я мог сыграть в гольф тест на первичность по полной программе - 17 байт:
echo(p:[:".1!:1)1
, что, к сожалению, составляет 1133 = 11 * 103.К сожалению, я не могу понять, как заставить ввод с клавиатуры работать на TIO, так что никакой ссылки пока нет.
Объяснение:
Проверка программы:
источник
C (gcc) ,
6260 байтов, 4583Довольно просто. Выходные данные * если простые, в противном случае выводится пробел. Не работает на 1.
-2 благодаря l4m2
Попробуйте онлайн!
источник
n;main(i){for(scanf("%d",&n);++i<n;)n=n%i?n:0;puts("*"+!n);}
возможно, потребуется изменить имя переменной для простой суммыAWK , 36 байтов, байтовая сумма 2239
Попробуйте онлайн!
Выходы,
0
если не простые и1
простые. Определенно, не самый эффективный код, так как он проверяет каждое целое число больше, чем1
чтобы увидеть, делит ли он ввод.источник
Excel (57 байт, кодовая сумма 3547)
В Excel на самом деле нет «входных данных» как таковых, но эта формула предполагает, что проверяемое число будет в A1, и выводится в любую ячейку, в которую вы его поместили. Это формула массива, поэтому нажмите Ctrl-Shift-Enter для ввода это, а не Enter.
источник
Java 8, 114 байт, Prime 10037
Попробуйте онлайн.
Объяснение:
Я использовал
x
вместо того,i
чтобы сделать сумму Unicode простым. Проверьте сумму Unicode здесь.источник
Желе , 4 байта, Σ = 239
Попробуйте онлайн!
Доказательство: попробуйте онлайн! (возьмите основанные на 1 индексы символов программы кодовой страницы Jelly, уменьшите их до 0, суммируйте, а затем проверьте, является ли результат простым).
источник
SmileBASIC, 42 байта,
2687
Выводит 1 (true), если число простое, в противном случае 0 (false).
Имена переменных были выбраны не просто для простоты программы.
N
является п умбра к испытанию,D
является д ivisor, иP
отслеживает ли п р изморозь.источник
Чудо , 7 байт,
537
Там, вероятно, есть лучший способ ...
источник
Ржавчина, 190 байт, 15013 баллов
Ungolfed
Не работает на 1
источник
Stax , 349
Запустите и отладьте его
источник
|pQ
работает на счет 317. Если допускается обмен правдой / ложью, то|p!
работает и на 269.Whispers v2 , 33 байта
Попробуйте онлайн!
44381
Как это работает
Это показано в порядке выполнения:
источник