|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Ещё раз рассмотрим тест Миллера-Рабина. Из вики: «Тест Миллера — Рабина – вероятностный полиномиальный тест простоты, позволяет эффективно определить, является ли данное число составным. Однако, с его помощью нельзя строго доказать простоту числа. Тем не менее, тест Миллера — Рабина часто используется в криптографии для получения больших случайных простых чисел.» В тесте Миллера-Рабина имеют место два условия для числа n, связанные с определением степени числа a по mod (n). Число a определяется как случайное число из отрезка (2, n-2). Показатели степени формируются из чисел d и r, где r берется из отрезка (1, s), а d и r определяются формулой , где d – нечётно. Теперь предлагается в условиях теста Миллера-Рабина уйти от использования случайных чисел и перейти на построение эвристического алгоритма. В тесте Миллера-Рабина имеет место две выборки: - случайного числа из отрезка (2, n-2), - перебор чисел из отрезка (1, s). Эвристический алгоритм будет строиться с использованием чисел из отрезков (2, n-2) и (1, s), которые выбираются по определённому закону. Данный закон будет определён после анализа всех возможных вариантов степени числа a по mod (n) для небольших чисел с последующим распространением полученного закона на все последующие числа ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 06:28 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
В сообщении 21958523 были показаны первые результаты анализа всех возможных вариантов степени числа a по mod (n) по первому условию теста Миллера-Рабина для небольших чисел. Анализ возможных вариантов степени числа a по mod (n) по первому условию теста Миллера-Рабина был проведен после выполнения небольшой программы 21959374 . На основании этих анализов были построены две программы, которые: - сначала определяется простое число обычным делением на возможные множители, а затем полученное простое число проверяется с помощью полученного эвристического алгоритма; - сначала определяется простое число с помощью полученного эвристического алгоритма, а затем полученное возможное простое число проверяется с помощью обычным делением на возможные множители. Данные программы проверяли числа от 5 до 250 000 000, и результаты двух программ совпали. Полученный алгоритм позволил определить только половину простых чисел из всего перечня простых чисел до 250 000 000, что совпадает с 21958523 . ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 06:55 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Как видно из сообщения 21958523 , для половины простых чисел при применении первого условия теста Миллера-Рабина остатки по модулю будут либо 1, либо (n – 1). Эвристический алгоритм по первому условию теста Миллера-Рабина будет заключаться в определении последовательности n-3 чисел Р, начиная с числа а = 2: в которой будет только либо 1, либо (n – 1). Для каждого числа рассматривались остатки по модулю для основания степени а, начиная с 2, и до 10 (так удобнее). Это удовлетворяет условию теста Миллера-Рабина для выбора случайных чисел на отрезке (2, n-2). Если исследуемое число меньше 13, то вместо 10 берётся число n-2. Анализ результатов тестовой программы 21959374 показал, что у большинства составных чисел, которые «прошли» тест Ферма, отличие остатков по модулю от 1 или (n – 1), начинается с а <= 5. На диапазоне от 5 до 250 000 000 были найдено несколько составных числа, прошедшие тест Ферма, у которых отличие остатков по модулю от 1 или (n – 1) начинается с а = 6, а для числа 25326001 уже при а = 7 получилось такое отличие. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 08:22 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Теперь можно сформулировать эвристический алгоритм для первого условия теста Миллера-Рабина: Пусть n – нечетное число и , где d – нечётно. Выбирается последовательность чисел а от 2 до 10. Для каждого числа а из этой последовательности определяются числа P на основании формулы Если для всех чисел Р остатки по модулю равны либо 1, либо (n – 1), то число n будет простым числом. Число 10 взято с запасом ( нет превышения 7). Пока подтверждено только одно число 25326001 при а = 7. Можно увеличить число 10. Но для этого нужны проверки для чисел, больших 250 000 000. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 09:18 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Gennadiy Usov, это Спарта Математика! Забудьте, наконец, все эти эвристики. Если утверждение строго доказано, то это теорема. Если утверждение не доказано и не опровергнуто, то это гипотеза. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 10:06 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Aleksandr SharahovGennadiy Usov, это Спарта Математика! Забудьте, наконец, все эти эвристики. Если утверждение строго доказано, то это теорема. Если утверждение не доказано и не опровергнуто, то это гипотеза.Aleksandr Sharahov, а как Вы не заметили математику в эвристическом алгоритме? В алгоритме присутствует известная всем формула Миллера — Рабина! И доказанная У теста Миллера-Рабина свой порядок поиска чисел для этой формулы. И у меня свой порядок поиска чисел для этой формулы, более оптимальный. И всё... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 11:00 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Как известно, для теста Миллера-Рабина рекомендуется брать r раундов для оценки остатков по модулю, где r = log (n) Для очень больших чисел количество раундов будет то же большое. В эвристическом алгоритме количество раундов 9 (пока). Поэтому, при поиске половины простых чисел используется в несколько раз меньше количество раундов. Таким образом, эвристический алгоритм будет работать быстрее при поиске простых чисел, чем первое условие теста Миллера-Рабина. И самое главное, эвристический алгоритм для первого условия теста Миллера –Рабина является достаточным! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 11:09 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Gennadiy Usov, Если вы добавили что-то новое к известным теоремам, то, конечно, сможете сформулировать это новое в виде утверждения, т.е. в виде гипотезы или теоремы. Именно это имеет смысл обсуждать, а не "более оптимальные эвристики". ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 11:14 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Немного из вики: Гипотеза – предположение или догадка; утверждение, требующее доказательств. Эвристика - отрасль знания, научная область, изучающая специфику творческой деятельности. Под эвристикой понимают совокупность приёмов и методов, облегчающих и упрощающих решение познавательных, конструктивных, практических задач. У меня не гипотеза, у меня эвристика. В тесте Миллера-Рабина много путей расчета первого условия, при этом применяются раунды, что-бы оценить результаты поиска нужных параметров для выполнения этого условия. Я применяю эвристический алгоритм для первого условия теста Миллера-Рабина, упрощающий поиск нужных параметров для выполнения этого условия. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2019, 11:29 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Было рассмотрено второе условие теста Миллера-Рабина. Для этого условия была аналогично применена программа по определению всех возможных вариантов степени числа a по mod (n) по первому условию теста Миллера-Рабина для небольших чисел. Здесь уже два параметра: s и a. Был проведён анализ этих вариантов. В результате анализа вариантов степеней была подтверждена необходимость объединения двух условий теста Миллера-Рабина в одно условие, а именно, во второе условие для теста Миллера-Рабина. С помощью этого условия и с помощью упрощающего поиска (эвристический алгоритм) нужных параметров для выполнения этого условия можно будет определять большинство простых чисел (или все). Для проведения тестовых работ применяется программа одновременного тестирования числа на наличие делителей и на выполнение второго условия для теста Миллера-Рабина. Если результаты по наличию составных чисел (или наличию простых чисел) совпадут, то эвристический алгоритм для определения простых чисел можно будет строить «на базе» второго условия для теста Миллера-Рабина. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2019, 13:14 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Посмотрел числа Прота – где k – нечётное положительное число. Оказалось, что числами Прота будут все нечётные числа. Однако, почему-то не все нечётные числа были включены в числа Прота. Наверное, из-за формулы числа Прота: Можно сделать следующую таблицу: - все нечётные числа чередуются через 2 числа от 2^0 + 1 - все числа с (s = 1) чередуются через 4 числа от 2^1+1 - все числа с (s = 2) чередуются через 8 чисел от 2^2+1 - все числа с (s = 3) чередуются через 16 чисел от 2^3+1 - все числа с (s = 4) чередуются через 32 чисел от 2^4+1, и т.д., пока не определяться все нечётные числа. Предварительные расчеты показали, что для простых чисел Прота число k будет простым числом. Кстати, уже ранее рассматривались числа Прота 21933488 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2019, 19:16 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Gennadiy UsovПосмотрел числа Прота – где k – нечётное положительное число. Оказалось, что числами Прота будут все нечётные числа. Однако, почему-то не все нечётные числа были включены в числа Прота. Надо быть внимательнее и не забыть условие k < 2 s ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2019, 19:42 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
BarloneНадо быть внимательнее и не забыть условие k < 2 s Я это условие видел, и, естественно, хочу обсудить это условие. Почему нужно это условие? Из-за формулы? Ведь, если нет этого условия, "покрываются" все нечётные числа. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2019, 19:57 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Просто, именно такие числа Прота "проверяет" на простоту тест Миллера-Рабина, причем проверяет числа при любых k и n. То есть, удобнее числа представлять в виде числа Прота. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.09.2019, 21:05 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
В сообщении 21966343 говорилось о том, что можно составить подмножества как нечётных чисел, так и простых чисел, в зависимости от величины числа s 21962235 . Результат определения числа s для всех простых чисел, начиная с 3, до некоторого числа N (ограничено временем работы ПК) показал, что количество простых чисел с (s = 1) составляет около 50% от всех простых чисел. Далее, - для чисел с (s = 2) количество простых чисел составляет около 25% от всех простых чисел; - для чисел с (s = 3) количество простых чисел составляет около 12,5% от всех простых чисел; - для чисел с (s = 4) количество простых чисел составляет около 6,25% от всех простых чисел; и т.д. То есть, применение достаточного эвристического алгоритма по первому условию теста Миллера-Рабина 21962217 позволяет быть уверенными в том, что определяемые по алгоритму числа будут простыми, и таких простых чисел будет около 50% от всех простых чисел на диапазоне (подмножество простых чисел для s = 1). ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2019, 16:53 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Анализ проведённых вычислений показал, что эвристический алгоритм для первого условия теста Миллера-Рабина справедлив для всех тех чисел n, у которых s = 1 (около 50% всех простых чисел). Позднее будет показано, что этот алгоритм справедлив и для ряда чисел, у которых s > 1. Тогда можно немного изменить формулировку этого эвристического алгоритма для первого условия теста Миллера-Рабина 21962235 . Пусть n – нечетное число и имеется формула , где d – нечётное число. Тогда для тех чисел n, у которых s = 1, выбирается последовательность чисел а от 2 до А. Для каждого числа а из этой последовательности определяются числа P на основании формулы Если для всех полученных чисел Р остатки по модулю равны либо 1, либо (n – 1), то число n будет простым числом. Число А выбирается равное 10, с запасом – пока подтверждено только одно число 25326001 при а = 7. Можно увеличить число 10. Но для этого нужны проверки для чисел, больших 250 000 000. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 13:17 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
В качестве применения эвристического алгоритма можно рассмотреть определение простых чисел Мерсенна. Для чисел Мерсенна имеем s= 1. Применение эвристического алгоритма для первого условия теста Миллера-Рабина позволило определить все простые числа Мерсенна Мр (пока до р < 25000) 21958707 ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 15:36 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Теперь рассмотрим числа n, у которых s = 2. Оказалось, что для данного варианта подходит формула эвристического алгоритма для первого условия теста Миллера-Рабина (s = 1). Таким образом, появляется единая формула эвристического алгоритма для всего теста Миллера-Рабина. Однако, для случая, когда рассматриваются числа n, у которых s = 2, необходимо некоторое дополнение: если среди последовательности из Р чисел (последовательность чисел а от 2 до А) нет ни одного числа (n – 1), то необходимо повторить работу с формулой эвристического алгоритма при (s – 2). Таким образом, эвристический алгоритм теста Миллера-Рабина для чисел n, у которых s = 2, будет выглядеть следующим образом: Пусть n – нечетное число и имеется формула , где d – нечётно. Тогда для чисел n, у которых s = 2, выбираем последовательность чисел а от 2 до А. Для каждого числа а из этой последовательности определяются числа P на основании формулы Если для всех чисел Р остатки по модулю равны либо 1, либо (n – 1), и при этом существует хоть одно из чисел Р, которое равно (n – 1), то число n будет простым числом. Если среди этой последовательности Р нет чисел, равных (n – 1), то необходим ещё одно определение последовательности чисел Р для чисел а от 2 до А по следующей формуле Если для всех чисел Р новой последовательности остатки по модулю равны либо 1, либо (n – 1), то число n будет простым числом. Поскольку имеется эвристический алгоритм для теста Миллера-Рабина для чисел n, у которых s = 1 или 2, то этот алгоритм позволяет определять уже около 75% простых чисел. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 19:49 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
maytonОн ещё с ребе и Миллером не закончил.Кажется, закончил… И теперь можно обобщить предыдущие исследования и ответить на вопрос о едином эвристическом алгоритме, достаточном, для определения простых чисел. Ранее был получен эвристический алгоритм для теста Миллера-Рабина для чисел n, у которых s = 1 или 2. Были проведены исследования о распространении этого алгоритма на любое число s. В результате можно сказать: получен единый достаточный эвристический алгоритм для теста Миллера-Рабина, который определяет наличие простоты для любого целого положительного числа. Формулировка единого эвристического, достаточного, алгоритма для теста Миллера-Рабина будет следующая: Пусть n – нечетное число и имеется формула , где d – нечётно. Тогда для этого числа n выбирается последовательность чисел а от 2 до А. Для каждого числа а из этой последовательности определяются числа P на основании формулы Если для всех чисел Р остатки по модулю равны либо 1, либо (n – 1), и при этом, только для s > 1, существует хоть одно из чисел Р, которое равно (n – 1), то число n будет простым числом. Если среди этой последовательности Р для s >2 нет чисел, равных (n – 1), то необходим цикл по s2 по определению последовательностей чисел Р для чисел а от 2 до А по следующей формуле где s2 меняется от (s - 2) до 0. Цикл заканчивается следующим образом: - если для всех чисел Р новой последовательности (для s2 = 0) остатки по модулю равны либо 1, либо (n – 1), то число n будет простым числом; - если для всех чисел Р новой последовательности (для s2 > 0) остатки по модулю равны либо 1, либо (n – 1), и при этом существует хоть одно из чисел Р, которое равно (n – 1), то число n будет простым числом; - если одно из чисел Р новой последовательности имеет остатки по модулю, не равные ни 1, ни (n – 1), то число n будет составным. Число А выбирается равное 10, с запасом – пока подтверждено только одно число 25326001 при а = 7. Можно увеличить число 10. Но для этого нужны проверки для чисел, больших 250 000 000. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 20:37 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
А хде исходники на Питоне? Мы тут народ - недоверчивый. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2019, 21:10 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
maytonА хде исходники на Питоне? Мы тут народ - недоверчивый.Заранее прошу меня извинить за стиль программы. Лет 30 не программировал на серьезном языке, только на EXCEL. Была подготовлена программа на Python, в которой решались следующие задачи: - рассматривались все нечётные числа, начиная с 5, далее блоками по 50 000 000; - каждое число проверялось на простоту; - для каждого числа определялось число s; - устанавливался предел по выбору чисел а; - формируется цикл по s; - определяется максимальное число max_a2_1, когда находится число, отличное от 1 или (n – 1); - определяется максимальное число количества раудов по s - max_a2_2; - найденное простое число проверяется на делимость; - отвергнутое число проверяется на делимость; - поскольку много простых чисел, то печатается только их количество на очередном диапазоне чисел со всеми оценочными числами; - в конце печатается количество найденных простых чисел; - печатаются все случаи, если они встретятся, когда программа, либо пропускает простые числа, либо определяет составные числа как простые. По отдельным случаям s программа «доходила» до 250 000 000. По всем s программа пока дошла до 68 200 187. Найдено 1 017 273 простых числа. Код: python 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. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2019, 06:35 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Можно существенно убыстрить работу программы 21969065 . Для этого вводятся дополнительно два цикла: 1. Предварительная проверка числа на делимость, например, до 180 (с учётом корня из числа). 2. Применение теста Ферма к числу. После этого проверка числа на делимость проводится уже с тех 181(с учётом корня из числа). Здесь нужно проводить исследования при выборе этого числа 180: до какого делителя числа лучше применять сначала делители, а уже потом тест Ферма. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2019, 09:03 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Gennadiy UsovОшибся. Вместо После этого проверка числа на делимость проводится уже с тех 181(с учётом корня из числа). Нужно После этого проверка числа на делимость (с учётом корня из числа). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2019, 09:22 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
У меня - другое число. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.09.2019, 09:29 |
|
|
start [/forum/topic.php?fid=16&fpage=8&tid=1339873]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
61ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
others: | 238ms |
total: | 426ms |
0 / 0 |