Что такое домашний премьер?
Для примера возьмем HP (4). Во-первых, найдите основные факторы. Первичные множители 4 ( в числовом порядке от наименьшего к наибольшему, всегда ) равны 2, 2. Принимайте эти факторы как буквальное число. 2, 2 становится 22. Этот процесс факторинга продолжается, пока вы не достигнете простого числа.
number prime factors
4 2, 2
22 2, 11
211 211 is prime
Как только вы достигнете простого числа, последовательность заканчивается. HP (4) = 211. Вот более длинный пример с 14:
number prime factors
14 2, 7
27 3, 3, 3
333 3, 3, 37
3337 47, 71
4771 13, 367
13367 13367 is prime
Ваша задача - создать программу, которая будет вычислять HP (x) по заданному x и делать это как можно быстрее . Вы можете использовать любые ресурсы, которые вам нужны, кроме списка известных домашних простых чисел.
Обратите внимание, эти числа становятся очень большими очень быстро. При x = 8 HP (x) прыгает полностью до 3331113965338635107. HP (49) еще не найдено.
Скорость программы будет проверена на Raspberry Pi 2, в среднем следующие входные данные:
16
20
64
65
80
Если у вас Raspberry Pi 2, запрограммируйте время самостоятельно, а затем усредните время.
источник
Ответы:
Mathematica, HP (80) за ~ 0,88 с
Анонимная функция. Принимает число в качестве ввода и возвращает число в качестве вывода.
источник
1
конце не должно быть там ...CompositeQ
для!PrimeQ
(что также гарантирует, что ваш ответ не зацикливается на входе1
).HP(80)
за такое короткое время, не запрограммировав где-нибудь простые числа? Мой ноутбук i7 тратит часы на проверку первичности, а также на поиск основных факторов, определяющих времяHP(80)
его появления47109211289720051
.PyPy 5.4.1 64bit (linux), HP (80) ~ 1.54s
32-битная версия будет немного медленнее.
Я использую четыре различных метода факторизации с эмпирически определенными точками останова:
Некоторое время я пытался найти чистый разрыв между ECF и MPQS, но, похоже, его нет. Однако, если n содержит небольшой коэффициент, ECF обычно находит его почти сразу, поэтому я решил протестировать только несколько кривых, прежде чем переходить к MPQS.
В настоящее время он всего в 2 раза медленнее, чем Mathmatica, что я, безусловно, считаю успешным.
home-prime.py
Пример времени
Среднее число 5 составляет около 0,39 с.
зависимости
mpqs.py
взято непосредственно из моего ответа на « Быстрейшую полупростую факторизацию» с несколькими очень незначительными изменениями.mpqs.py
my_math.py
взято из того же постаmpqs.py
, но я также добавил в генератор неограниченных простых чисел, который я использовал в своем ответе, чтобы найти самый большой разрыв между хорошими простыми числами .my_math.py
источник
Python 2 + primefac 1.1
У меня нет Raspberry Pi, чтобы проверить его.
Попробуйте онлайн
primefac
Функция возвращает список всех простых факторовn
. В своем определении он называетisprime(n)
, который использует комбинацию пробного деления, метода Эйлера и теста первичности Миллера-Рабина. Я бы порекомендовал скачать пакет и просмотреть исходный код.Я попытался использовать
n = n * 10 ** int(floor(log10(f))+1) + f
вместо конкатенации строк, но это намного медленнее.источник
pip install primefac
работал для меня, хотя 65 и 80, кажется, не работают на окнах, из-заfork
в фоновом режиме.primefac
было довольно забавно, так как есть много комментариев сTODO
илиfind out why this is throwing errors
# This occasionally throws IndexErrors.
Да, потому что он снял проверку, что используются более гладкие, чем простые числа.C #
Это более оптимизированная версия предыдущего кода, с некоторыми ненужными лишними частями.
Выход (на моем ноутбуке i7):
Тест онлайн
источник
Perl + ntheory, HP (80) за 0.35 с на ПК
Нет Raspberry Pi под рукой.
Тест на простоту - ES BPSW, плюс одно случайное основание MR для больших чисел. При таком размере мы могли бы использовать
is_provable_prime
(n-1 и / или ECPP) без заметной разницы в скорости, но это изменилось бы для> 300-значных значений без реальной выгоды. Факторинг включает в себя пробный, силовой, Rho-Brent, P-1, SQUFOF, ECM, QS в зависимости от размера.Для этих входов он работает примерно с той же скоростью, что и код Чарльза Пари / GP на сайте OEIS. В теории есть более быстрый факторинг для небольших чисел, и мои P-1 и ECM довольно хороши, но QS не очень хорош, поэтому я ожидаю, что Pari будет быстрее в какой-то момент.
источник
use feature "say";
.