Определите, что натуральное число p является простым +1 от натурального числа n, если p является простым числом, и стандартное двоичное представление (т. Е. Без начальных нулей) p может быть получено путем добавления (т. Е. Добавления, добавления или вставки) один 1 к стандартному двоичному представлению n .
Например, двоичное представление 17 равно 10001 2 . Различными натуральными числами, которые могут быть сформированы путем добавления 1 к 10001 2, являются 110001 2 или 49 , 101001 2 или 41 , 100101 2 или 37 и 100011 2 или 35 .
Среди них 41 и 37 являются простыми числами, поэтому 17 имеет два +1 простых числа .
задача
Написать программу или функцию , которая принимает строго натуральное число п в качестве входных данных и выводит или возвращает число различных +1 простых чисел из п .
Входные и выходные данные должны быть либо целыми числами, либо их десятичным или унарным строковым представлением.
Применяются стандартные правила игры в гольф .
Контрольные примеры
Input: 4
Output: 0
Input: 1
Output: 1
Input: 17
Output: 2
Input: 33
Output: 3
Input: 553
Output: 4
Input: 3273
Output: 5
Input: 4145
Output: 6
Input: 4109
Output: 7
Input: 196869
Output: 8
Ответы:
Pyth, 20 байтов
Тестирование
источник
JavaScript ES6, 141 байт,
143,147,160Экономит 13 байт благодаря @Naouak
Метод, аналогичный моему ответу на TeaScript, использует RegExp (вы меня правильно поняли) для проверки простых чисел.
Ungolfed
источник
(p=(n,c)=>n%c!=0?c>=n-1?1:p(n,++c):0)('0b'+l,2)
вместо!Array(+('0b'+l)+1).join(1).match(/^1?$|^(11+?)\1+$/)
Минколанг 0,11 ,
5452 байтаобъяснение
источник
TeaScript , 22 байта
TeaScript начинает выглядеть как APL ... Специальные символы преобразуются в более длинные, часто повторяющиеся последовательности
Онлайн-переводчик обязательно должен проверить «Входы - это числа».
Объяснение && Ungolfed
источник
Юлия,
5552 байтаk=2.^(0:endof(bin(n)))
генерирует массив, содержащий степени 2 от 1 до максимальной мощности меньше, чемn
.2n+k-n%k
затем использует операции массива, чтобы определить все возможные «+1 числа».∪
(эквивалентноunion
, что делает то же самое, что иunique
в этой ситуации) удаляет повторяющиеся значения. Затемsum(isprime,)
подсчитывает количество простых чисел в списке.источник
CJam, 26 байтов
Не победитель, но он превосходит существующие ответы CJam довольно твердо, и я впервые использую команду 0.6.5
e\
.Проверьте это здесь.
объяснение
Стоит отметить, что мы поменяем местами биты перед первой копией
0
и1
перед ее созданием, поэтому мы потеряем исходный массив с1
добавленным вперед. Однако вход всегда положительный, поэтому первая цифра всегда будет одна. Это означает, что после добавления еще одного, список цифр всегда будет начинаться с[1 1 ...]
того, что первый своп в любом случае будет запрещен.источник
Mathematica, 87 байт
источник
Юлия,
11010810487 байтЭто создает безымянную функцию, которая принимает и целое число и возвращает целое число. Чтобы назвать его, дайте ему имя, например
f=n->...
.Ungolfed:
Сохранено 17 байтов благодаря Glen O!
источник
bin
должен начинаться с 1, поэтому вам не нужно отдельно обрабатывать"1"b
. И когда уi=length(b)
вас будетb[i+1:end]
эквивалент""
, поэтому нет необходимости в этой записи (просто нужно обработатьb=bin(n)
в какой-то момент). Иsum
будет делать то же самое, что иcount
для двух меньших байтов.b
любом случае собираетесь использовать диапазон по длине , вы можете получить его с небольшим уловком -b=bin(n)[s=1:end]
и затемfor i=s
для понимания.bin
должен быть равен 1, и вы получите следующее:n->sum(i->isprime(parse(Int,i,2)),(b=bin(n);unique([b[[1:i;1;i+1:end]]for i=1:endof(b)])))
- это уменьшит счет до 90 байт.unique
наunion
- он будет делать то же самое, если в качестве входных данных будет указан только один массив. Или еще лучше∪
вместоunion
.CJam, 58 байт
Это заняло у меня один день, и это была моя четвертая итерация.
источник
Japt
-x
,1411 байтПопробуйте или запустите все тесты
источник
PHP, 145 байт
Я добавил новую строку для удобства чтения:
источник
CJam, 34 байта
Попробуйте онлайн
Первая версия, будет обновляться, если я придумаю что-нибудь получше.
источник
APL, 55
На 2 байта короче Dyalog-специфичная версия:
источник
Матлаб (120)
источник
Брахилог , 17 байт
Попробуйте онлайн!
Ввод через входную переменную и вывод через выходную переменную.
источник
Желе , 13 байт
Попробуйте онлайн!
источник
Python 2 , 103 байта
Попробуйте онлайн!
источник