Если вы когда-нибудь узнали о простых числах в математическом классе, вам, вероятно, пришлось в какой-то момент определить, является ли число простым. Вы, наверное, все испортили, когда еще изучали их, например, приняли 39 за простое число. Ну, не волнуйтесь, так как 39 - полупростая, т. Е. Что она является произведением двух простых чисел.
Точно так же мы можем определить k- почти простое число как произведение k простых чисел. Например, 40 является 4-м 4-почти простым; 40 = 5 * 2 * 2 * 2, произведение 4 факторов.
Ваша задача - написать программу / функцию, которая принимает два целых числа n и k в качестве входных и выходных данных и возвращает n- е k -малое простое число. Это код-гольф, поэтому выигрывает самая короткая программа в байтах.
Контрольные примеры
n, k => output
n, 1 => the nth prime number
1, 1 => 2
3, 1 => 5
1, 2 => 4
3, 2 => 9
5, 3 => 27
Разнообразный
Вы должны генерировать простые числа любыми способами, кроме простой замкнутой формы, если такая замкнутая форма существует.
f
в терминахf[n,1]
правильно, поскольку списки почти простых чисел содержат нечетные числа (например, два последних примера, которые не могут быть выражены как произведение степени двойки и простого числа). (И это также говорит о томf[n,1] == 2*f[n,1]
.)Ответы:
Pyth, 9 байт
объяснение
Попробуй это здесь!
Или попробуйте тестовый набор!
источник
Брахилог , 9 байт
Побеждая @sundar, используя в два раза меньше байтов
объяснение
Попробуйте онлайн!
источник
Пайк (коммит 29), 8 байт (неконкурентный)
Объяснение:
источник
Юлия,
84785957 байтЭто рекурсивная функция, которая принимает два целых числа и возвращает целое число. Подход здесь заключается в проверке суммы показателей в простой факторизации по
k
.Ungolfed:
источник
Желе, 9 байт
Попробуйте онлайн!
Как это работает
источник
Брахилог , 18 байт
Попробуйте онлайн!
источник
Mathematica,
5651 байтПредупреждение: это теоретическое. Не используйте для любых значений> 4. Замените 2 ^ ## более эффективным выражением.
источник
n=1
.PrimeOmega[1]
оценивает0
,&&#>1
является избыточным.Mathematica,
5349 байтСоздает список целых чисел на основе свободной верхней границы.
PrimeOmega
считает простые множители с кратностями, k- самое простое числоCases
берется из списка, и возвращается n- й член этого подмножества.источник
2^Sequence[1,2]
понять, почему последнее не получается.Haskell, 88 байт
Возможно, можно играть в гольф намного больше, так как я все еще новичок в Haskell. Функция
q
возвращает число факторов своего аргумента иf
использует его, чтобы получитьnth
элемент списка, составленный из всех чисел, имеющихk
факторы.источник
MATL, 14 байтов
Попробуйте это на MATL Online
источник
Python 3, 100 байт
Это очень простая функция грубой силы. Он проверяет каждое число, начиная с 2, с помощью функции
sympy
sfactorint
до тех пор, пока не найдетn
k
почти все простые числа, после чего функция возвращаетn
их число.Ungolfed:
Я использую
sum(factorint(a).values())
потому чтоfactorint
возвращает словарьfactor: exponent
пар. Получение значений словаря (экспонентов) и их суммирование говорит мне, сколько существует простых факторов и, следовательно, чтоk
этоk
самое простое число.источник
Python 2 , 76 байт
Попробуйте онлайн!
источник