Мне задали этот вопрос в интервью, но я не смог найти никакого решения. Я не знаю, был ли вопрос прав или нет. Я много пробовал, но не смог найти решение. Честно говоря, ничего не пришло мне в голову.
Рокко номера
Целое положительное число является числом Рокко, если оно может быть представлено в виде или , где - простое число.
Первые 10 чисел Рокко:
задача
Ваш код должен принять положительное целое число в качестве входных данных и определить, является ли это число Рокко или нет.
Брауни очки
- Напишите функцию, которая вычисляет и печатает число чисел Рокко, меньшее или равное 1 миллиону.
- Напишите функцию, которая вычисляет и печатает количество чисел Рокко из бонусного вопроса (выше одного), которые являются простыми.
code-golf
decision-problem
number-theory
vijayscode
источник
источник
print 0
. Все числа Рокко составные(n*..)
, поэтому в любом диапазоне нет простых чисел.Ответы:
05AB1E , 8 байтов
Возвращает1 если N - число Рокко, или 0 противном случае.
Попробуйте онлайн!
Как?
Учитывая положительное целое числоN , мы проверяем, существует ли простой фактор п числа N такой, что:
комментарии
источник
JavaScript (ES7), 55 байт
Попробуйте онлайн!
Как?
Учитывая положительное целое числоN , мы ищем такое простое число Икс , что х ( х + 14 ) = н или х ( х - 14 ) = н .
Отсюда и следующие квадратные уравнения:
Положительный корень( 1 ) :
Для этого мы используем классическую функцию теста рекурсивной простоты с дополнительным тестом, чтобы убедиться, что он не зацикливается вечно, если в качестве входных данных ему дано иррациональное число.
Основная функция обертки:
источник
Perl 6 ,
4528 байтПопробуйте онлайн!
Объяснение:
источник
Регулярное выражение (ECMAScript),
6462 байтаПри этом используется вариант алгоритма умножения, кратко описанного в абзаце моего регулярного выражения в числовых выражениях . Это спойлер . Так что не читайте дальше, если вы не хотите, чтобы какая-то продвинутая магия унарных регулярных выражений была испорчена для вас . Если вы действительно хотите сами разобраться в этой магии, я настоятельно рекомендую начать с решения некоторых проблем в списке последовательно рекомендованных проблем со спойлерами в этом предыдущем посте и попытаться найти математическое понимание самостоятельно.
Алгоритм умножения здесь реализован по-разному, потому что мы утверждаем, что два известных значения, умноженные вместе, равны другому известному значению (как также сделано в альтернативной версии регулярного выражения в этом посте , чтобы проверить число, являющееся идеальным квадратом). До сих пор в большинстве моих других опубликованных ответов на регулярные выражения умножение реализовано как вычисление (а не утверждение, концептуально говоря), где цель состоит в том, чтобы найти произведение двух известных чисел. Оба метода работают в обоих обстоятельствах, но с точки зрения игры в гольф хуже справляются друг с другом.
Попробуйте онлайн!
источник
Брахилог ,
1312 байтВведите номер кандидата в качестве аргумента командной строки. Выходы
true
илиfalse
. Попробуйте онлайн!объяснение
Код - это предикат, входные данные которого не ограничены, а выходные данные - число, которое мы тестируем.
(Советы приветствуются. Это
{+|-}
все еще кажется неуклюжим.)источник
Брахилог , 9 байт
Различный подход тогда DLosc «s ответ
Принимает N в качестве выходных данных, возвращает [P, P-14] или [P + 14, P] обратно через вход (наибольшее число сначала)
объяснение
Попробуйте онлайн!
источник
Pyth,
2220 байтПопробуйте это онлайн здесь .
Редактировать: сохраненные 3 байта в качестве входных данных всегда будут положительными, поэтому нет необходимости отфильтровывать отрицательные значения из списка. Также исправлена ошибка для входных данных
1
и2
стоимостью 1 байт. Предыдущая версия:}Qsm*Ld>#0+Ld_B14fP_TU
источник
05AB1E ,
161514 байтовСохранено 1 байт путем вычисления 14
7·
вместоžvÍ
(не могу поверить, что я вообще не думал об этом).Сохранено 1 байт благодаря Emigna
Попробуйте онлайн! или проверить все входы
объяснение
источник
}˜så
наQ}Z
использование неявного ввода. Ваш Test-Suite должен быть немного изменен на что-то вроде этого, чтобы он заработал тогда. Кроме того, более очевидный способ написанияžvÍ
или7·
будет14
;)J ,
2115 байтНа основании решения Арно
Попробуйте онлайн!
Предыдущая попытка:
Попробуйте онлайн!
источник
14 e.q:|@-]%q:
для 14 байтовСетчатка 0.8.2 , 61 байт
Попробуйте онлайн! Объяснение:
Преобразовать в одинарный.
\1
захватывает больший из двух факторов.\2
захватывает константу 14, сохраняя байт.\3
захватывает меньший из двух факторов, минус 1. Это также гарантирует, что оба фактора, по крайней мере, 2.Проверьте два фактора, чтобы убедиться, что хотя бы один из них является простым. Идея использования
\2?
была бесстыдно украдена из ответа @ Deadcode.Повторите больший из двух факторов, количество раз равное одному меньшему, чем меньшее из двух факторов. Поскольку мы уже уловили больший фактор, то это в конечном итоге захватит произведение двух факторов.
Убедитесь, что продукт равен указанному числу.
Прямой перевод в Retina 1 путем замены
$*
на*1
будет иметь тот же счетчик байтов, но можно сохранить байт, заменив все1
s на_
s, а затем*1
можно заменить на*
вместо*_
. Предыдущая Retina 1 ответ за 68 байт:Попробуйте онлайн! Объяснение:
Преобразовать в одинарный.
Найти все пары факторов.
Убедитесь, что один прост.
Возьми абсолютную разницу.
Проверьте, есть ли 14.
источник
JavaScript (Babel Node) , 69 байт
Блин, хотя я собирался обыграть ответ Арно, но нет .....: c
Попробуйте онлайн!
Я хочу избавиться от
x=>[...Array(x)].some(
части, используя рекурсию, чтобы она могла стать короче со временемобъяснение
Использует формулу
источник
Japt , 10 байт
То же, что мой ответ на Javascript
Попробуйте онлайн!
источник
Желе , 9 байт
Попробуйте онлайн!
источник
APL (NARS) 16 символов, 32 байта
{π⍵} нашел бы факторизацию своего аргумента, и мы предполагаем, что последний элемент его результата (список делителей n) является максимальным простым делителем n; Здесь мы предполагаем, что одно эквивалентное определение числа Рокко: n - это число Рокко <=>, максимальное простое число множителя n: r таково, что оно истинно 14 = ∣rn ÷ r [для псевдокода C как 14 == abs (rn) / r) это определение числа Рокко кажется приемлемым в конце концов в диапазоне 1..1000000]; диапазон значения ok будет 1..maxInt; тестовое задание:
источник
C # (интерактивный компилятор Visual C #) , 99 байт
Попробуйте онлайн!
Enumerable.Range
поражает снова :) Используя сумасшедший флаг компилятора, вы можете немного уменьшить ситуацию, хотя я являюсь фанатом ванильного решения.C # (интерактивный компилятор Visual C #) + /u:System.Linq.Enumerable, 77 байт
Попробуйте онлайн!
Ниже приведен порт решения Арно, который выглядел довольно круто. В настоящее время он самый длинный, но, возможно, его можно сыграть в гольф.
C # (интерактивный компилятор Visual C #) , 101 байт
Попробуйте онлайн!
источник
APL (NARS) 30 символов, 60 байтов
Здесь 0π - функция, скажем, если одно число является простым, test:
источник
F #, 2 ответа (неконкурентный)
Мне очень понравились ответы @Arnauld, поэтому я перевел их.
123 байта , основываясь на ответе JavaScript
Объяснение:
125 байтов , основанный на ответе 05AB1E
Объяснение:
источник
Python 2 , 58 байт
Выходы по коду выхода, fails (
1
) для чисел Рокко.Попробуйте онлайн!
источник