Одним из способов представления натурального числа является умножение показателей простых чисел. Например, 6 может быть представлено как 2 ^ 1 * 3 ^ 1, а 50 может быть представлено как 2 ^ 1 * 5 ^ 2 (где ^ означает экспоненту). Количество простых чисел в этом представлении может помочь определить, короче ли этот метод представления по сравнению с другими методами. Но поскольку я не хочу рассчитывать их вручную, мне нужна программа, которая сделает это за меня. Однако, поскольку мне придется запоминать программу, пока я не вернусь домой, она должна быть максимально короткой.
Твое задание:
Напишите программу или функцию, чтобы определить, сколько различных простых чисел существует в этом представлении числа.
Входные данные:
Целое число n такое, что 1 <n <10 ^ 12, взятое любым нормальным методом.
Выход:
Количество различных простых чисел, необходимых для представления входных данных, как указано во введении.
Тестовые случаи:
24 -> 2 (2^3*3^1)
126 -> 3 (2^1*3^2*7^1)
1538493 -> 4 (3^1*11^1*23^1*2027^1)
123456 -> 3 (2^6*3^1*643^1)
Это OEIS A001221 .
Подсчет очков:
Это код-гольф , выигрывает самая низкая оценка в байтах!
источник
Ответы:
MATL ,
43 байта-1 байт благодаря Луису Мендо
Попробуйте онлайн!
Оригинальный ответ:
Попробуйте онлайн!
Вер
Yfun
ответ.источник
05AB1E , 2 байта
еще один довольно скучный ответ ...
Полная программа, принимающая числовой ввод и печатающая результат
Попробуйте онлайн!
Как?
источник
Mathematica, 7 байтов
Да, есть встроенный.
Mathematica, 21 байт
Долгий путь вокруг.
источник
Length@FactorInteger
то же самое?Length@*FactorInteger
производит чистую функцию: составLength
иFactorInteger
. Я могу определить,fun=Length@*FactorInteger
а затем позвонитьfun[1001]
. С другой стороны,Length@FactorInteger
будет означатьLength[FactorInteger]
и оценивать0
.Gaia , 2 байта
Еще один довольно скучный ответ ... --- Дж. Аллан
Попробуйте онлайн!
ḋ
- Первичная факторизация в виде [простых, показательных] пар.l
- длинаисточник
Python 2, 56 байт
источник
Сетчатка ,
3130 байтВвод одинарный.
Спасибо @MartinEnder за игру в 1 байт!
Попробуйте онлайн!(включает десятичный в унарный преобразователь)
Как это устроено
Поскольку программа состоит из одного регулярного выражения с
&
модификатором, Retina просто считает количество совпадений . Предполагается, что вход состоит из n повторений 1 и ничего больше.Негативный взгляд
совпадения в позициях между 1 , за которыми не следуют два или более 1 (
11+
), за которыми следуют одно или несколько повторений с одинаковым количеством 1 (\1+
), за которым следует конец ввода ($
).Любое составное число ab с a, b> 1 может быть записано как b повторений с повторениями 1 , так что предварительный просмотр соответствует только местоположениям, за которыми следуют p повторений 1 , где p = 1 или p является простым числом.
Регулярное выражение
удостоверится, что p> 1 , требуя, по крайней мере, два 1 (
11+
) и сохранит хвост 1 во второй группе захвата (\2
).Наконец, позитивный взгляд за
проверяет, что весь вход состоит из kp вхождений ( k ≥ 1 ) из 1 , проверяя, что p делит вход.
Таким образом, каждому совпадению соответствует единственный простой делитель p .
источник
Утилиты Bash + GNU, 33
Попробуйте онлайн .
объяснение
источник
grep -Po ' \d+'
сохраняет байты надtr \ \\n|sed 1d
.grep -Po '( \d+)\1*'
не удается ввести 46 .Желе , 3 байта
довольно скучный ответ ...
Монадическая ссылка, принимающая число и возвращающая число
Попробуйте онлайн!
Как?
источник
Æv
?Æ
это альтернативный код 0198. 2. Вы можете настроить клавиатуру (у меня нет). 3. Кодовая страница.Ом v2 , 2 байта
Попробуйте онлайн!
Две встроенные функции находятся рядом друг с другом в документации.
источник
Желе , 2 байта
Еще один довольно скучный ответ ... --- Дж. Аллан
Попробуйте онлайн!
Встроенный.
источник
Алиса , 10 байт
Попробуйте онлайн!
объяснение
Это просто стандартная структура для линейных арифметических программ, требующих десятичного ввода-вывода. Сама фактическая программа тогда просто:
Который делает:
источник
JavaScript 45 байт
* Для @SEJPM запросите объяснение: то, что я делаю здесь, это то, что я иду от 2 - n (который изменяется, и в конечном итоге будет наибольшим простым множителем) - теперь, если текущее число делит n, я хочу посчитать его только один раз (даже хотя это может быть коэффициент 2 * 2 * 2 * 3 - 2 считается один раз) - поэтому на рисунке появляется «j», когда j не указан в вызове функции - j получит значение « undefined ", и когда n% i == 0, тогда я вызываю функцию с j = 1 в следующем вызове) - и тогда я добавляю только 1, когда j равно undefined, что является! j + Function (n / i, i, ( j = 1 или просто 1)). я не изменяю i в этом вопросе, потому что он все еще может делиться на i снова (2 * 2 * 3), но тогда j будет равно 1, и это не будет учитываться как фактор. надеюсь, я объяснил это достаточно хорошо.
если последнее простое число очень велико, то оно будет иметь максимальный стек вызовов - если это проблема, я могу сделать итеративную
источник
CJam ,
75 байтовСпасибо Мартину Эндеру за 2 байта!
Анонимный блок (функция), который ожидает входной номер в стеке и заменяет его выходным номером.
Попробуйте онлайн! Или проверьте все тестовые случаи .
объяснение
источник
Брахилог , 3 байта
Попробуйте онлайн!
объяснение
источник
Pyth, 3 байта
Тестирование
Длина (
l
) множества ({
) простых факторов (P
) входных данных.источник
Шелуха , 3 байта
Попробуйте онлайн!
объяснение
источник
Фактически , 2 байта
Еще один довольно скучный ответ ... --- Дж. Аллан
Попробуйте онлайн!
Первый символ может быть заменен на
w
.источник
Пайк , 3 байта
Попробуй это здесь!
источник
Python 3 ,
6867 байт1 байт удален благодаря @ Mr.Xcoder
Это время для самых больших тестов. Попробуйте онлайн!
источник
R + числа,
3014 байтов16 байтов удалено благодаря @Giuseppe
Кроме того, вот Попробуйте онлайн! ссылка на @Giuseppe.
источник
f=function(x)
и(x)
как ужеnumbers::omega
является функцией. Однако, какnumbers
это не является стандартным для R, вы должны сделать ответ «R + числа». Кроме того, вы должны включить ссылку TIO . Тем не менее +1 очень приятно.MATL
решение очень хорошее (+1 вчера).numbers::
. В противном случае, для меня это то же самое, что и использованиеimport
любого другого языка.Выпуклый , 3 байта
Попробуйте онлайн!
источник
Pari / GP , 5 байт
Я не знаю, почему это называется nu в Mathematica, а омега в Pari / GP.
Попробуйте онлайн!
источник
Haskell , 58 байт
-4 байта благодаря @Laikoni
Попробуйте онлайн!
объяснение
По существу генерирует все простые числа не более, чем
n
и фильтрует их как фактор n, а затем принимает длину результата.источник
sum[1|x<- ... ]
вместоlength
.Japt,
54 байтаПопытайся
Получите делители (
â
) и посчитайте (è
) простых чисел (j
).источник
ARBLE , 28 байт
Попробуйте онлайн!
Это очень буквальное решение
источник
Дьялог АПЛ , 17 байт
Попробуйте онлайн!
источник
Python 2 ,
6355 байтГораздо более интересный ответ ...
-8 байт благодаря Джонатану Фреху (используйте аргумент со значением по умолчанию для пост-корректировки результата простых чисел от
0
до1
- намного лучше, чем лямбда-обертка !!)Рекурсивная функция, принимающая положительное целое число
n
и возвращающая положительное целое число.Попробуйте онлайн! Действительно неэффективно, даже не беспокойтесь о других тестах.
источник
J, 12 байт
q:
является функцией простых показателей J, давая ей аргумент__
создает матрицу, первая строка которой - все ненулевые простые множители, а вторая строка - их показатели.Мы принимаем форму
$
этой матрицы - строки за столбцами - количество столбцов является ответом, который мы ищем.{:
дает нам последний элемент этого списка двух элементов (количество строк, количество столбцов) и, следовательно, ответ.Попробуйте онлайн!
источник
Java (OpenJDK 9) , 67 байт
Попробуйте онлайн!
источник
Javascript ES6, 56 символов
Тестовое задание:
источник