|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Gennadiy UsovBarloneЭх, опять промахнулись... 3317044064679887385961981 - вот тут уже 43 надо.А вот и нет! Здесь s = 2. При s = 1 одни 1 и (n - 1) до 42. А при s = 0 при 2 сразу составное!Не понял, это как? Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2019, 17:26 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Будем категоризировать числа на "простые", "составные" и "неизвестные"? Это было-бы честно в данном топике. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2019, 17:30 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Что-то у меня сомнения, не наврал ли я в спешке где-то в алгоритме... Надо перепроверить еще раз ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2019, 17:39 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
BarloneGennadiy UsovЗдесь s = 2. При s = 1 одни 1 и (n - 1) до 42. А при s = 0 при 2 сразу составное!Не понял, это как? Код: plaintext 1. 2. 3. 4. 5.
(0, 806966215798523717614900L, 2) (0, 1L, 3) (0, 3317044064679887385961980L, 4) (0, 1L, 5) (0, 806966215798523717614900L, 6) (0, 806966215798523717614900L, 7) (0, 2510077848881363668347081L, 8) Уже при основании степени 2 видно, что остаток не равен ни 1, ни (n - 1). А раз этот остаток не равен, то исходное число - составное. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2019, 17:50 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Gennadiy UsovBarloneпропущено... Не понял, это как? Код: plaintext 1. 2. 3. 4. 5.
(0, 806966215798523717614900L, 2) (0, 1L, 3) (0, 3317044064679887385961980L, 4) (0, 1L, 5) (0, 806966215798523717614900L, 6) (0, 806966215798523717614900L, 7) (0, 2510077848881363668347081L, 8) Уже при основании степени 2 видно, что остаток не равен ни 1, ни (n - 1). А раз этот остаток не равен, то исходное число - составное.Чего? 13 - 1 = 2 2 *3 Берем основание 2, 2 3 = 8, это не 1 и не 12 по модулю 13. 13 - составное число? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2019, 19:39 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
BarloneЧто-то у меня сомнения, не наврал ли я в спешке где-то в алгоритме... Надо перепроверить еще разРазобрался. Небольшая неточность, которая не влияет на результат проверки. Неканонично получилось, результат возведения в степень поделен пополам, но и сравнивается с единицей, а не с 2. Вобщем, можно не исправлять. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2019, 19:51 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
BarloneЧего? 13 - 1 = 2 2 *3 Берем основание 2, 2 3 = 8, это не 1 и не 12 по модулю 13. 13 - составное число?Уговорил. Будет 56. Тем более, что log = 56. Я забыл, что по алгоритму сначала (s - 1), а потом (s - 2) и т.д. А не наоборот. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2019, 19:55 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
BarloneBarloneЧто-то у меня сомнения, не наврал ли я в спешке где-то в алгоритме... Надо перепроверить еще разРазобрался. Небольшая неточность, которая не влияет на результат проверки. Неканонично получилось, результат возведения в степень поделен пополам, но и сравнивается с единицей, а не с 2. Вобщем, можно не исправлять.Да, а вот с квадратным корнем надо что-то сделать. 2^1023 еще лезет, а 2^1024 говорит "OverflowError: int too large to convert to float" ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2019, 19:59 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Ну теперь вот так: Код: 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. 92. 93. 94. 95. 96. 97. 98. 99.
Ищем простые от 2^1024 - нашлись 2^1024 + (643, 1081, 2113, 2715, 3711) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2019, 20:12 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
BarloneBarloneпропущено... Разобрался. Небольшая неточность, которая не влияет на результат проверки. Неканонично получилось, результат возведения в степень поделен пополам, но и сравнивается с единицей, а не с 2. Вобщем, можно не исправлять.Да, а вот с квадратным корнем надо что-то сделать. 2^1023 еще лезет, а 2^1024 говорит "OverflowError: int too large to convert to float"У меня то же самое. Либо без корня (я не использую корень на больших числах), либо "делить" на части и перемножать. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2019, 20:45 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
BarloneИщем простые от 2^1024 - нашлись 2^1024 + (643, 1081, 2113, 2715, 3711)Ещё 5335, 5793, 5947, 7015, 7447, 7935, 8953, 8995, 9855. 1 мин. 48 сек. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2019, 20:50 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Gennadiy UsovBarloneИщем простые от 2^1024 - нашлись 2^1024 + (643, 1081, 2113, 2715, 3711)Ещё 5335, 5793, 5947, 7015, 7447, 7935, 8953, 8995, 9855. 1 мин. 48 сек.У меня секунд за 15 те же. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2019, 21:19 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Наконец послушали специалиста. Вы уж там разбирайтесь, но так скоропалительно, а то быстро 30 страниц набежит типа "о-опс, ошибка", "блин, снова ошибся", "ёлы-палы, поспешил" ... ну вы помните. И мой вопрос затеряется, и никто не ответит(( А вопрос у меня сбоку от ваших проблем. Почему остановились на 2^2k ? и диапазон 100тыс хиленький. Мог бы кто-нибудь найти кол-во простых в след-х дипаз-х (для сравнения с оценкой, к-рую я давал 2-3 дня назад): Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Попутно интересно отработать модные теперь эвристики для погрешности оценки. Это чтобы не вычислять типа 1/(Ln x - 2) для больших x и т.п. Интересно посмотреть насколько относительная погрешность апроксимируется величиной sqrt(1/f(x)), где f(x) есть кол-во простых в диапазоне. И тогда абсолютная погрешность sqrt(f(x)). Вообще я догадываюсь, что далеко не всегда так будет, но на нашем скудном материале даже различие 70 и 79 примерно на границе такой погрешности (прикидывал на бумажке, без калькулятора). А тоя смотрю, как после p=1024 относит-я погр-ть скакнула в 1000 раз для p=2K(2024) Ну и сами диапазоны в будущем хочется подлиннее. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2019, 21:27 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
exp98, чтобы такие диапазоны обсчитывать, надо бы с питона на что-то более быстрое перейти. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 05:14 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
BarloneGennadiy UsovЕщё 5335, 5793, 5947, 7015, 7447, 7935, 8953, 8995, 9855. 1 мин. 48 сек.У меня секунд за 15 те же.С предварительным делением на малые множители или нет? И ПК у меня старенький. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 05:59 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
exp98Наконец послушали специалиста. Почему остановились на 2^2k ? и диапазон 100тыс хиленький. Попутно интересно отработать модные теперь эвристики для погрешности оценки. Это чтобы не вычислять типа 1/(Ln x - 2) для больших x и т.п. Интересно посмотреть насколько относительная погрешность апроксимируется величиной sqrt(1/f(x)), где f(x) есть кол-во простых в диапазоне. И тогда абсолютная погрешность sqrt(f(x)). Вообще я догадываюсь, что далеко не всегда так будет, но на нашем скудном материале даже различие 70 и 79 примерно на границе такой погрешности (прикидывал на бумажке, без калькулятора). А тоя смотрю, как после p=1024 относит-я погр-ть скакнула в 1000 раз для p=2K(2024) Ну и сами диапазоны в будущем хочется подлиннее.Что нам даёт погрешность от "специалиста"? Вот и sqrt после p=1024 не работает, и "скакнула" скорость после p=1024. И всё. Есть формула количества, а есть расчёты. Уточняем формулу или уточняем расчёты? У одного 70, у другого 79, а что у "специалиста" - неизвестно. И что это даёт? Наверное не формулу, а что-то другое ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 06:28 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Barloneexp98, чтобы такие диапазоны обсчитывать, надо бы с питона на что-то более быстрое перейти.Обсчитали, и что это даст? Будем прыгать и радоваться, что посчитали около 2^(какое-то)? Кого сейчас этим удивишь, когда существуют мощные компьютеры. Другое дело, если создаётся удобный математический аппарат, который убыстряет процесс определения простых чисел. При этом формируется достаточность. Чтобы сравнивать алгоритмы, надо считать не время, а считать раунды. Ведь формулы везде одинаковы, что у нас, что в Африке. Только каждый их по разному применяет Раунды не зависят ни от языка, ни от ПК. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 06:39 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Gennadiy Usov Чтобы сравнивать алгоритмы, надо считать не время, а считать раунды. Почти правильно. Я добавлю что надо считать не время а некие элементарные мат-операции которые надо выполнить чтобы достичь результата. И оценить как эти операции растут от объема данных. Обычно - нелинейно. И есть также заблуждение о том что умножение занимает единицу времени. Для длинных целых чисел умножений зависит квадратично от разрядной сетки числа. Это тоже надо учитывать. Как - не знаю но надо. Если всё правильно оценить - получим асимптоматику. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 11:16 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Gennadiy Usov Чтобы сравнивать алгоритмы, надо считать не время, а считать раунды. "Сколько времени придётся ждать?" - это я понимаю. "Сколько раундов будет сделано?" - не понимаю, да и какая мне разница??? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 11:22 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Gennadiy UsovЧто нам даёт погрешность от "специалиста"? ... Уточняем формулу или уточняем расчёты?Вам - ничего, мне - удовольствие. Каждый косит свой газон. Да вы и свои рассчёты не торопились ещё недавно уточнять, что изменилось вдруг? Не принц, конечно, но что есть,то есть, за сколько мне вам отдаться? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 11:44 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, я не вдаюсь в подробности, видимо это некая агрегированная прмежуточная величина алгоритма. Возможно пропорциональная вычислительной сложности этого модуля. Щас речь не о пользователях. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 11:47 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Basil A. SidorovGennadiy Usov Чтобы сравнивать алгоритмы, надо считать не время, а считать раунды. "Сколько времени придётся ждать?" - это я понимаю. "Сколько раундов будет сделано?" - не понимаю, да и какая мне разница???Почитайте про тест Миллера-Рабина https://ru.wikipedia.org/wiki/Тест_Миллера_—_Рабина Там всё написано про раунды. Главная трудность работы тестов простоты - это количество раундов. Этим количеством увеличивают вероятность получения нужного числа случайным образом. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 15:06 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
Gennadiy UsovГлавная трудность работы тестов простоты - это количество раундов. Этим количеством увеличивают вероятность получения нужного числа случайным образом.Я читал. Вопрос был другой. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 15:11 |
|
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
|
|||
---|---|---|---|
#18+
А вот интересная задача (по поводу определения раундов) import math a1= math.sqrt(1000000000000000000000001)//1 a2 = math.sqrt(1000000000000000000000000000000000000000000001)//1 print (a1, a2) И печать результатов: (1000000000000.0, 3.1622776601683792e+22) Вот почему одно число целое, а другое число вещественное? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2019, 15:59 |
|
|
start [/forum/topic.php?fid=16&msg=39871377&tid=1339873]: |
0ms |
get settings: |
11ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
242ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 18ms |
total: | 361ms |
0 / 0 |