|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
Полностью исходники (зеркало) OpenJDK можно скачать здесь https://github.com/unofficial-openjdk/openjdk ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2019, 14:46 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
В код также забито много некрасивых и математически неясных "гвоздей". Это связано с тем что создатели этого BitInteger беспокоились лишь о том чтобы код работал быстро. Ясность чтения исходника их не беспокоила. Вот данное выражение Код: java 1.
следует читать так. Если переменная result имеет разрядную сетку больше чем 6 бит. По сути 6 бит это число более чем 64. Еще аналог - целое логарифмирование по основанию 2. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2019, 14:51 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
В питоне запустил программу по поиску составных чисел, удовлетворяющих тесту Ферма. Рассмотрено 10 000 007 чисел. Из них - 664575 простых чисел. Тесту Ферма удовлетворяют 685 составных чисел. Где-то 1 : 100 Максимальный из минимальных множителей составных чисел - 2971. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2019, 20:40 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
Так я самый первый исходник не до конца скопипастил. Вобщем если длина числа меньше SMALL_PRIME_THRESHOLD (95 бит) то в бой идут алгоритмы прямого брутфорса. Потом Миллера Раввина в пересечечии с Люка-Лемьером. Причем идет пересеченеи условий. Необходимое - Миллер. Достаточное - Люка. Насколько я понимаю здесь должен быть 100% детерминимзм. Не зря они сетку ограничивали. Если разрядность числа выше 95 бит то дальше создается битовое решето (BitSieve). Как оно работает в данном алгоритме я не изучал. Что это за метод? Эратосфен или нет не знаю. Алгоритм искусственно останавливается когда разрядная решетка достигает 500000000 бит и выдает ошибку. Это ограничение было введено в 2013 году. Далее эта формула. Код: sql 1.
Это что-то типа шага по решетке. Вычисляется как bitLength / 20 * 64. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 00:53 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
maytonТак я самый первый исходник не до конца скопипастил. Вобщем если длина числа меньше SMALL_PRIME_THRESHOLD (95 бит) то в бой идут алгоритмы прямого брутфорса. Потом Миллера Раввина в пересечечии с Люка-Лемьером. Причем идет пересеченеи условий. Необходимое - Миллер. Достаточное - Люка. Насколько я понимаю здесь должен быть 100% детерминимзм. Не зря они сетку ограничивали. Если разрядность числа выше 95 бит то дальше создается битовое решето (BitSieve). Как оно работает в данном алгоритме я не изучал. Что это за метод? Эратосфен или нет не знаю. Алгоритм искусственно останавливается когда разрядная решетка достигает 500000000 бит и выдает ошибку. Это ограничение было введено в 2013 году.Я так понимаю, что есть интерес разобраться с диапазоном целых чисел. А задача будет выглядеть так: На произвольном диапазоне определить простые числа (или определить составные числа из определённой последовательности целых чисел). Если рассматривать такую задачу, то необходимо задачу разделить на подзадачи, и рассматривать постепенно эти подзадачи. Подзадача 1. Выбор последовательности целых чисел. Возможны следующие варианты: - нечётные числа; - числа 6К+-1 - числа из блоков 21812001 :30, 210, 2310, и т.д. (о таких блоках известно из вики, при этом считается, что блок 210 и более не несёт существеного убыстрения работы программы) То есть, такими блоками ограничивается количества перебираемых целых чисел. Я использовал в 21952070 2-й вариант Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 07:27 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
Не особо. Я просто комментирую то как nextPrime уже реализован в языковых библиотеках. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 07:33 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
maytonНе особо. Я просто комментирую то как nextPrime уже реализован в языковых библиотеках..... и пишу простенькие программы в порядке комментария ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 07:38 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
Меня интересовал Radix tree/trie. И всякие сжатые форматы хранения аналитики. А простые числа просто под руку подвернулись. Как хороший источник шума со свойствами. Вот такой вот загадочный мотиватор. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2019, 07:58 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
В продолжение сообщения 21952153 привожу код по перебору целых чисел с помощью массива Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2019, 07:38 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
maytonВобщем если длина числа меньше SMALL_PRIME_THRESHOLD (95 бит) то в бой идут алгоритмы прямого брутфорса. Вопрос: а зачем нам нужны числа, меньше SMALL_PRIME_THRESHOLD (95 бит)? Например, факторизатор "Империя чисел" работает с числами 10^60 ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2019, 08:00 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
Gennadiy UsovmaytonВобщем если длина числа меньше SMALL_PRIME_THRESHOLD (95 бит) то в бой идут алгоритмы прямого брутфорса. Вопрос: а зачем нам нужны числа, меньше SMALL_PRIME_THRESHOLD (95 бит)? Например, факторизатор "Империя чисел" работает с числами 10^60 Не знаю. Могу предположить что эта точка была выбрана на графике экспериментально. Эта точка делит множество чисел на два направления. Первое - это брутфорс + миллер-рабин + люка лемьер. Второе это Решето неизвестного типа. Экперимент мог заключаться в выборе наименьшего времени отклика. Там где два графика отклика пересеклись - там и взяли эту точку. Поскольку Люка Лемьер как самый главный точный и детерминированный алгоритм имеет комплексность порядка O(n^3) то график мог вырасти быстро до времени неприемлимого для человеческого ожидания. Хотя... могли брать по другому принципу. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2019, 10:10 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
Gennadiy UsovНапример, факторизатор "Империя чисел" работает с числами 10^60 Что такое империя чисел - понятия не имею. Не слыхал. Сколько она потребляет памяти. И каких вычислительных ресурсов ей надо. Может ей нужен дата-центр с 1000 процессорами и пета-байтом кеша расчётных чисел. Можем ли мы это применить в быту? Или в рамках наших скромных задач на sql.ru? И не забывайте что факторизация и тест на простоту это всё-таки не совсем одно и то-же. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2019, 10:14 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
maytonGennadiy UsovНапример, факторизатор "Империя чисел" работает с числами 10^60 Что такое империя чисел - понятия не имею. Не слыхал. Сколько она потребляет памяти. И каких вычислительных ресурсов ей надо. Может ей нужен дата-центр с 1000 процессорами и пета-байтом кеша расчётных чисел. Можем ли мы это применить в быту? Или в рамках наших скромных задач на sql.ru?Факторизатор "Империя чисел" - это : https://ru.numberempire.com/ Этот факторизатор удобен только для отдельных чисел.maytonИ не забывайте что факторизация и тест на простоту это всё-таки не совсем одно и то-же.Но у них общие "корни". ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2019, 10:36 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
Gennadiy Usovmaytonпропущено... Что такое империя чисел - понятия не имею. Не слыхал. Сколько она потребляет памяти. И каких вычислительных ресурсов ей надо. Может ей нужен дата-центр с 1000 процессорами и пета-байтом кеша расчётных чисел. Можем ли мы это применить в быту? Или в рамках наших скромных задач на sql.ru?Факторизатор "Империя чисел" - это : https://ru.numberempire.com/ Этот факторизатор удобен только для отдельных чисел.maytonИ не забывайте что факторизация и тест на простоту это всё-таки не совсем одно и то-же.Но у них общие "корни". Ну ты видел что поиск следующего простого содержит как минимум бутерброд из 4х разных алгоритмов? Зачем ты говоришь про общие корни? Как мы твои корни натянем на эту практическую реализацию. Я понимаю ты идеалист. Я тебе еще в ферзевой задаче говорил что мы должны подходить очень селективно к алгоритму основываясь на разной природе входных данных. Серебрянной пули не будет. У нас будет десяток бронзовых пуль каждая из которых хорошо работает в данном диапазоне чисел или ферзей или вектора входных данных и очень-очень плохо работаает на другом векторе входа. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2019, 10:39 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
maytonGennadiy UsovВопрос: а зачем нам нужны числа, меньше SMALL_PRIME_THRESHOLD (95 бит)?Не знаю. Могу предположить что эта точка была выбрана на графике экспериментально. .... Хотя... могли брать по другому принципу.Могу предположить, что число SMALL_PRIME_THRESHOLD (95 бит) не связано с исследуемым числом. Скорее всего, здесь имеет место скорость вычислений: когда удобно так, а когда удобнее этак. Сейчас попробую проверить на 1000... повторных вычислений скорость определения: - остатка по тесту Ферма для большого числа - остатка после деления этого большого числа на серию произвольных чисел. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2019, 10:44 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
maytonИ не забывайте что факторизация и тест на простоту это всё-таки не совсем одно и то-же.Но у них общие "корни". maytonНу ты видел что поиск следующего простого содержит как минимум бутерброд из 4х разных алгоритмов? Зачем ты говоришь про общие корни? Как мы твои корни натянем на эту практическую реализацию. Я понимаю ты идеалист. Я тебе еще в ферзевой задаче говорил что мы должны подходить очень селективно к алгоритму основываясь на разной природе входных данных. Серебрянной пули не будет. У нас будет десяток бронзовых пуль каждая из которых хорошо работает в данном диапазоне чисел или ферзей или вектора входных данных и очень-очень плохо работаает на другом векторе входа.А кто сказал, что будет один алгоритм? Для поиска простых чисел и факторизации чисел используются одни и те же алгоритмы. Или разные? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2019, 10:50 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
Рабин Миллер не факторизирует. И брут-форс просто определяет что число разделилсь на 1 делитель нацело. Например на 3. Дальше - не идет. Алгоритм закончен. Число - составное. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2019, 11:00 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
maytonРабин Миллер не факторизирует. И брут-форс просто определяет что число разделилсь на 1 делитель нацело. Например на 3. Дальше - не идет. Алгоритм закончен. Число - составное.А если не нашелся делитель, то когда нужно остановиться? Ведь число очень-очень большое. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2019, 11:18 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
Gennadiy UsovmaytonРабин Миллер не факторизирует. И брут-форс просто определяет что число разделилсь на 1 делитель нацело. Например на 3. Дальше - не идет. Алгоритм закончен. Число - составное.А если не нашелся делитель, то когда нужно остановиться? Ведь число очень-очень большое. Геннадий. Я вас уже считаю разработчиком. Читайте код. Последний делитель который мы делим методом грубой силы это число 41. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2019, 11:32 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
maytonGennadiy UsovА если не нашелся делитель, то когда нужно остановиться? Ведь число очень-очень большое. Геннадий. Я вас уже считаю разработчиком. Читайте код. Последний делитель который мы делим методом грубой силы это число 41. Спасибо за доверие! А почему 41, а не 43, а не 61, а не ....? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2019, 11:43 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
Решил сравнить время на проведение операция для большого числа в двух вариантах: - тест Ферма - деление на множество делителей. Получилось, что за 3 сек. можно найти для числа p = pow(2, 1023) + 345 : - 1000 тестов Ферма - 5 000 000 делений на делители. Получилось, что за 3 сек. можно найти для другого числа p = pow(2, 2023) + 89 : - 150 тестов Ферма - 3 000 000 делений на делители. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2019, 12:38 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
Gennadiy Usovmaytonпропущено... Геннадий. Я вас уже считаю разработчиком. Читайте код. Последний делитель который мы делим методом грубой силы это число 41. Спасибо за доверие! А почему 41, а не 43, а не 61, а не ....? Я всё таки еще упрощу этот цикл. Как я уже говорил Java не годится для работы с длинными целыми. Разверну эти толстые функции типа reminder. Под капотом у нее бутерброд из двух алгоритмов remainderKnuth и remainderBurnikelZiegler. Надеюсь это просто какие-то оптимизации быстрого остатка от деления. Первый из них носит гордую фамилию Кнута. Это радует. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2019, 18:05 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
maytonGennadiy UsovА почему 41, а не 43, а не 61, а не ....?Я всё таки еще упрощу этот цикл. Как я уже говорил Java не годится для работы с длинными целыми. Разверну эти толстые функции типа reminder. Под капотом у нее бутерброд из двух алгоритмов remainderKnuth и remainderBurnikelZiegler. Надеюсь это просто какие-то оптимизации быстрого остатка от деления. Первый из них носит гордую фамилию Кнута. Это радует.Вы не ответили на вопрос: почему последнее простое число 41. Я попробую представить свой вариант части кода (начало цикла, остальное - в зависимости от применения) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Количество простых чисел в массиве можно увеличить ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2019, 18:36 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
Я не знаю почему 41. Я просто разворачиваю вложенность сорца и представляю его на суд в форуме в читабельном виде. Предположительно это другая экспериментальная константа которая была забита в код на основании замеров времени как оптимум. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2019, 18:39 |
|
Ещё раз о тесте Ферма
|
|||
---|---|---|---|
#18+
maytonПотом Миллера Раввина в пересечечии с Люка-Лемьером. Причем идет пересеченеи условий. Необходимое - Миллер. Достаточное - Люка. Насколько я понимаю здесь должен быть 100% детерминимзм. Не зря они сетку ограничивали.В вики записано: "Тест Люка — Лемера — полиномиальный, детерминированный и безусловный (то есть не зависящий от недоказанных гипотез) тест простоты для чисел Мерсенна ." (или для чисел, расположенных рядом с числами Мерсенна) Для остальных чисел этот тест не подходит. Если это не так, то приведите пример, желательно, на небольших числах. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.08.2019, 20:03 |
|
|
start [/forum/topic.php?fid=16&msg=39852352&tid=1339906]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
158ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 285ms |
0 / 0 |