Одно из моих любимых определений простых чисел выглядит следующим образом:
2 - наименьшее простое число.
Числа больше 2 являются простыми, если они не делятся на меньшее простое число.
Однако это определение кажется произвольным, почему 2? Почему не какой-то другой номер? Что ж, давайте попробуем некоторые другие числа определим n-простое, что
n наименьшее n-простое число.
Числа, большие n, являются n-простыми, если они не делятся на меньшее n-простое число.
задача
Задача здесь состоит в том, чтобы написать программу, которая принимает два входа: положительное целое число n и положительное целое число a . Это будет решить , если является п -премьер. Ваша программа должна вывести два разных значения, одно для «да, это n-простое» и одно для «нет, это не n-простое».
Это вопрос кода игры в гольф, поэтому ответы будут оцениваться в байтах, причем меньше байтов будет лучше.
тесты
Вот списки первых 31 простых чисел от n = 2 до n = 12 (1 - единственное 1-простое число)
n=2: [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127]
n=3: [3,4,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127]
n=4: [4,5,6,7,9,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113]
n=5: [5,6,7,8,9,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113]
n=6: [6,7,8,9,10,11,13,15,17,19,23,25,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107]
n=7: [7,8,9,10,11,12,13,15,17,19,23,25,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107]
n=8: [8,9,10,11,12,13,14,15,17,19,21,23,25,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89,97]
n=9: [9,10,11,12,13,14,15,16,17,19,21,23,25,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89,97]
n=10: [10,11,12,13,14,15,16,17,18,19,21,23,25,27,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89]
n=11: [11,12,13,14,15,16,17,18,19,20,21,23,25,27,29,31,35,37,41,43,47,49,53,59,61,67,71,73,79,83,89]
n=12: [12,13,14,15,16,17,18,19,20,21,22,23,25,27,29,31,33,35,37,41,43,47,49,53,55,59,61,67,71,73,77]
источник
n=6, a=15
это первый интересный тестовый пример.Ответы:
Haskell , 45 байт
Попробуйте онлайн!
Я определил хорошую рекурсивную функцию
(!)
:n!a
проверяет , является ли какой - либо факторa
, в диапазоне[n,a-1]
, являетсяn-prime
. Тогда это сводит на нет результат. Это также гарантирует, чтоn>a
источник
Python 2 ,
3937 байтСпасибо Халварду Хаммелю за -2 байта.
Попробуйте онлайн!
источник
Python 3 , 45 байт
Попробуйте онлайн!
Как это работает
В качестве входных данных используются два целых числа, i и k . Сначала проверяется, если k ≥ i . Затем генерирует диапазон [i, k) и для каждого целого числа N в этом диапазоне проверяет, является ли N взаимно простым с k . Если оба условия выполнены, то k является i- простым числом.
источник
&
вместоand
и>=i
вместо>i-1
?>=i
по-прежнему 4 байта (из-за пробела).&
вам не нужно место.Шелуха ,
65 байтПопробуйте онлайн! или посмотреть результаты до 80 .
Спасибо Лео за -1 байт.
объяснение
источник
R ,
4437 байтПопробуйте онлайн!
-7 байт благодаря Джузеппе
Возвращает,
TRUE
еслиa
равноn
или (a==n|
)a
больше чемn
и (a>n&
) для каждого числа k отn
доa-1
,a
не делится на k (all(a%%n:(a-1))
)Возвращает
FALSE
иначеисточник
J, 30 байт
Попробуйте онлайн!
Принимает начальное значение в качестве правого аргумента и значение для проверки в левом аргументе.
Я изначально все испортил и не учел левых аргументов меньше, чем начальное простое число. Я несколько недоволен длиной моего решения сейчас.
объяснение
Позвольте
x
быть левый аргумент (значение для проверки) иy
будет правым аргументом (начальное простое число).Заметки
Элемент в позиции
x-y
является результатом тестирования на примитивность дляx
(так как мы добавилиy
в исходный диапазон).Умножение на
x >: y
гарантирует, что мы получим значение Falsey (0
)x
меньше, чемy
.источник
JavaScript (ES6),
333230 байтПринимает ввод в синтаксисе карри
(n)(a)
. Возвращает логическое значение.демонстрация
Показать фрагмент кода
источник
Haskell , 30 байт
2 байта сэкономлено благодаря идее H.PWiz, заимствованной из ответа flawr
Попробуйте онлайн!
Хорошо, так как это было давно, и единственный ответ на Haskell до сих пор - 45 bty, я решил опубликовать свой собственный ответ.
объяснение
Эта функция проверяет, что единственное число между n и a , на которое делится a, является само собой.
Теперь в определении упоминаются только n- простые числа, меньшие чем a , так почему же мы проверяем все эти дополнительные числа? Не возникнут ли у нас проблемы, когда a делится на некоторую n- композицию, большую чем n ?
Мы не будем этого делать, потому что если n- композит больше n, он должен делиться на меньший n- простой по определению. Таким образом, если он делит, то должен и меньший n -прайм.
Если a меньше n
[n..a]
, то,[]
следовательно, не может быть равным, что[1]
приводит к сбою проверки.источник
Желе , 8 байт
Попробуйте онлайн!
источник
Пип ,
231914 байтКратчайший метод - это порт ответа г-на Ксодера на Python . Принимает наименьшее простое число и число для проверки в качестве аргументов командной строки. Попробуйте онлайн!
источник
C, 55 байтов
Попробуйте онлайн!
53 байта, если допустимо несколько возвращаемых значений:
Попробуйте онлайн!
источник
постоянный ток ,
403437 байтЯ бы включил ссылку TIO, но TIO, похоже, содержит неправильное распределение,
dc
поскольку в моей системе это работает так, как задумано, ноQ
команда работает неправильно на TIO. Вместо этого вот ссылка наbash
полигон с правильно работающей версиейdc
:Демо Это!
источник
APL (Дьялог) , 24 байта
Попробуйте онлайн!
Как?
⍳⍵
-1
дляa
o←⍺↓
-n
чтобыa
сохранитьo
o|⍨⊂o
- по модулю каждого предметаo
с каждым предметом вo
0=
- проверить, где он равен0
(делит)+/¨
- сумма количества делений1=
- если у нас есть только один, то число делится только на себяo/⍨
- так что мы храним эти случаи⍵∊
- находитсяa
в этом остаточном массиве?источник
JavaScript (Node.js) , 27 байт
Попробуйте онлайн!
Порт моего Python-ответа, принимает входные данные в синтаксисе карри:
m(number)(first prime)
источник
JavaScript ES5, 34 байта
источник
Добавить ++ , 20 байт
Попробуйте онлайн!
источник