powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Эвристический алгоритм (формула, тест простоты) для определения простых чисел
25 сообщений из 233, страница 7 из 10
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871117
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А насчет практики - есть такое число Скьюза . Это про гипотезу, что количество простых чисел, не превосходящих n, меньше чем интегральный логарифм li(n). Она выполняется до 10 316 , а потом перестает выполняться... Вы свой алгоритм хотя бы до 10 316 проверяли?
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871118
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovЯ говорю об одинаковых условиях для двух программ: старенький ПК, Питон.И что?
Вот я в детстве иногда лепил из пластилина. Кое-что из моих "творений" даже стояло дома на видном месте.
И что? Кому и зачем всё это может быть интересно?

P.S.
"Всё" - не столько мои излияния, сколько ваши "труды". Уж не обижайтесь.
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871120
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovGennadiy UsovПрограмма оценила число:
Код: plaintext
1.
2.
3.
2019-10-03-13.00.20
 -число-  3825123056546413053
-Нет простых чисел- 0
2019-10-03-13.00.20
Этот загадочный ответ сообщает, что число простое или как?Программа "приняла" число и "сказала",

что среди представленных чисел (одно число в перечне) 0 простых чисел. (слово "нет" - лишнее, убираю)

2019-10-03-13.09.54
-число- 3825123056546413053
-простых чисел- 0
2019-10-03-13.09.54
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871121
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovBarloneпропущено...
На питоне? Да, хороший вариант для измерения скорости :)Но сравнивались две прогроммы на Питоне.

Я же не говорю о времени работы программ.
Я говорю об одинаковых условиях для двух программ: старенький ПК, Питон.Не, просто питон известен своей тормознутостью...
Хотя, вы в степень то наверное встроенной функцией возводили?
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871123
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovBasil A. Sidorovпропущено...
Этот загадочный ответ сообщает, что число простое или как?Программа "приняла" число и "сказала",

что среди представленных чисел (одно число в перечне) 0 простых чисел. (слово "нет" - лишнее, убираю)

2019-10-03-13.09.54
-число- 3825123056546413053
-простых чисел- 0
2019-10-03-13.09.54Эй, у меня последняя цифра была 1
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871125
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovПрограмма "приняла" число и "сказала", что среди представленных чисел (одно число в перечне) 0 простых чисел. (слово "нет" - лишнее, убираю)"Ясвасхудею".
А выдать что-то вроде:
Код: plaintext
1.
2.
  Всего чисел - xxx
  Проверено чисел - yyy
  Простых чисел - zzz
?

Ну или учитывая, что простые числа, типа, "редкие", по мере проверки просто печать список "эвристически простых", а по итогу выдать общую статистику?
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871126
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovBarloneВот еще хорошее число: 3825123056546413051Программа оценила число:

2019-10-03-13.00.20
-число- 3825123056546413053
-Нет простых чисел- 0
2019-10-03-13.00.20не то число
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871136
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BarloneGennadiy Usovпропущено...
Программа оценила число:

2019-10-03-13.00.20
-число- 3825123056546413053
-Нет простых чисел- 0
2019-10-03-13.00.20не то числоРазобрался.

У меня цикл по нечётным числам с шагом 2 на диапазоне, я назначил число и ограничил на +1,
а цикл (на то он и цикл) прибавляет и сравнивает с ограничителем.

А печать идёт после выхода из цикла.
Внутри цикла составные числа программе не нужны, поэтому эти числа там не печатаются.

Исправил (отнял 2):

2019-10-03-13.19.53
-число- 3825123056546413051
-простых чисел- 0
2019-10-03-13.19.53
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871141
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BarloneА насчет практики - есть такое число Скьюза . Это про гипотезу, что количество простых чисел, не превосходящих n, меньше чем интегральный логарифм li(n). Она выполняется до 10 316 , а потом перестает выполняться... Вы свой алгоритм хотя бы до 10 316 проверяли?На топике считал для некоторой таблички числа порядка 2^2048.

На диапазоне 2^1024 количество простых чисел на диапазоне совпало с расчётом mayton.

А вопрос один - с чем сравнивать, как проверять.
Делители "будут очень долго считать"...
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871143
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovBarloneпропущено...
не то числоРазобрался.

У меня цикл по нечётным числам с шагом 2 на диапазоне, я назначил число и ограничил на +1,
а цикл (на то он и цикл) прибавляет и сравнивает с ограничителем.

А печать идёт после выхода из цикла.
Внутри цикла составные числа программе не нужны, поэтому эти числа там не печатаются.

Исправил (отнял 2):

2019-10-03-13.19.53
-число- 3825123056546413051
-простых чисел- 0
2019-10-03-13.19.53Не сходится с тем, что вы про свой алгоритм рассказываете...
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871145
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovGennadiy UsovПрограмма "приняла" число и "сказала", что среди представленных чисел (одно число в перечне) 0 простых чисел. (слово "нет" - лишнее, убираю)"Ясвасхудею".
А выдать что-то вроде:
Код: plaintext
1.
2.
  Всего чисел - xxx
  Проверено чисел - yyy
  Простых чисел - zzz
?
Ну или учитывая, что простые числа, типа, "редкие", по мере проверки просто печать список "эвристически простых", а по итогу выдать общую статистику?Согласен.

Поскольку задают вопросы, нужно привести программу в порядок:
красиво оформить выходные данные.

Хотя программы должно быть две (дубляж):
для диапазона и для отдельного числа.
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871146
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BarloneGennadiy UsovРазобрался.
У меня цикл по нечётным числам с шагом 2 на диапазоне, я назначил число и ограничил на +1,
а цикл (на то он и цикл) прибавляет и сравнивает с ограничителем.
А печать идёт после выхода из цикла.
Внутри цикла составные числа программе не нужны, поэтому эти числа там не печатаются.
Исправил (отнял 2):

2019-10-03-13.19.53
-число- 3825123056546413051
-простых чисел- 0
2019-10-03-13.19.53Не сходится с тем, что вы про свой алгоритм рассказываете...И где расхождение?
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871149
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
n = 3825123056546413051
n-1 = 2 1 *1912561528273206525

a (n-1)/2 mod n равно 1 или n-1 для всех a от 2 до 36...
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871174
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Barlonen = 3825123056546413051
n-1 = 2 1 *1912561528273206525
a (n-1)/2 mod n равно 1 или n-1 для всех a от 2 до 36...Хороший пример!

У меня записано:
"Число А выбирается равное 10, с запасом – пока подтверждено только одно число 25326001 при а = 7.
Можно увеличить число 10.
Но для этого нужны проверки для чисел, больших 250 000 000."

Просто увеличиваем А до 15 простых чисел!
То есть до 47.
И смотрим дальше.

Ещё есть примеры?
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871192
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YouTube Video
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871194
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насчет простых чисел поторопился...

У числа 3825123056546413051 log (n) = 42...

Поэтому ставим А = 42 и рассматриваем все числа от 2 до 42.

Число 36 - попадает.

Ещё раз уточнил старые расчёты.

Для тестовых расчётов log (1 000 000 001) = 20.

Мне встречались числа 11, 13, 15.

Поэтому, A = log (n).

И в тесте Миллера-Рабина log (n).
Однако ушли от вероятности.
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871198
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gennadiy UsovНасчет простых чисел поторопился...

У числа 3825123056546413051 log (n) = 42...

Поэтому ставим А = 42 и рассматриваем все числа от 2 до 42.

Число 36 - попадает.

Ещё раз уточнил старые расчёты.

Для тестовых расчётов log (1 000 000 001) = 20.

Мне встречались числа 11, 13, 15.

Поэтому, A = log (n).

И в тесте Миллера-Рабина log (n).
Однако ушли от вероятности.
Эх, опять промахнулись... 3317044064679887385961981 - вот тут уже 43 надо.
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871202
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А насчет простых то как раз всё правильно: понятно, что если a m mod n = 1 и b m mod n = 1 то и (ab) m mod n = 1
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871204
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
import math

def jacobi(a, n):
    assert(a > 0 and n % 2 == 1)
    a %= n
    t = 1
    while a != 0:
        while a % 2 == 0:
            a = a // 2
            r = n % 8
            if r == 3 or r == 5:
                t = -t
        a, n = n, a
        if a % 4 == 3 and n % 4 == 3:
            t = -t
        a %= n
    if n == 1:
        return t
    else:
        return 0

def pair2(a, d, n):
    return ((a[0] * a[0] + n - 2) % n, (a[0] * a[1]) % n)
        
def pairmul(a, b, d, n):
    x = (a[0] * b[0] + d * a[1] * b[1]) % n
    if x % 2 == 0:
        x = x // 2
    else:
        x = (n + x) // 2
    y = (a[0] * b[1] + b[0] * a[1]) % n
    if y % 2 == 0:
        y = y // 2
    else:
        y = (n + y) // 2
    return (x, y)

def pairpow(a, m, d, n):
    r = (1, 0)
    while m != 0:
        if m % 2 == 1:
            r = pairmul(r, a, d, n)
        a = pair2(a, d, n)
        m = m // 2
    return r

def isprime(n):
    if n == 2:
        return True
    if n % 2 == 0:
        return False
    if n == 3:
        return True
    if n % 3 == 0:
        return False
    if n == 5:
        return True
    if n % 5 == 0:
        return False

    m = int(math.sqrt(n))
    if m * m == n:
        return False

    p = 3
    d = p * p - 4
    j = jacobi(d, n)
    while j == 1:
        p = p + 1
        d = p * p - 4
        j = jacobi(d, n)

    if j == 0:
        return False

    if pow(d, n // 2, n) != n - 1:
        return False

    a = pairpow((p, 1), (n + 1) // 2, d, n)
    if a[1] != 0:
        return False
    if a[0] != 1 and a[0] != n - 1:
        return False
    return True

Вот вам тест простоты на питоне, вызывать isprime(n) - проверяйте, ищите контрпримеры. Это как раз Люка.
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871207
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точнее, один раунд Ферма Соловея-Штрассена плюс Люка
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871216
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поторопился, если подсунуть квадрат очень большого числа, math.sqrt вычисляется с ошибкой, и в цикле поиска квадратичного невычета зависает... Поправил.
Код: 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.
import math

def jacobi(a, n):
    assert(a > 0 and n % 2 == 1)
    a %= n
    t = 1
    while a != 0:
        while a % 2 == 0:
            a = a // 2
            r = n % 8
            if r == 3 or r == 5:
                t = -t
        a, n = n, a
        if a % 4 == 3 and n % 4 == 3:
            t = -t
        a %= n
    if n == 1:
        return t
    else:
        return 0

def pair2(a, d, n):
    return ((a[0] * a[0] + n - 2) % n, (a[0] * a[1]) % n)
        
def pairmul(a, b, d, n):
    x = (a[0] * b[0] + d * a[1] * b[1]) % n
    if x % 2 == 0:
        x = x // 2
    else:
        x = (n + x) // 2
    y = (a[0] * b[1] + b[0] * a[1]) % n
    if y % 2 == 0:
        y = y // 2
    else:
        y = (n + y) // 2
    return (x, y)

def pairpow(a, m, d, n):
    r = (1, 0)
    while m != 0:
        if m % 2 == 1:
            r = pairmul(r, a, d, n)
        a = pair2(a, d, n)
        m = m // 2
    return r

def isprime(n):
    if n == 2:
        return True
    if n % 2 == 0:
        return False
    if n == 3:
        return True
    if n % 3 == 0:
        return False
    if n == 5:
        return True
    if n % 5 == 0:
        return False

    m = int(math.sqrt(n))
    if m * m == n:
        return False
    k = (m + n // m) // 2
    while k != m:
        m, k = k, (m + n // m) // 2
    if m * m == n:
        return False
    
    p = 3
    d = p * p - 4
    j = jacobi(d, n)
    while j == 1:
        p = p + 1
        d = p * p - 4
        j = jacobi(d, n)

    if j == 0:
        return False

    if pow(d, n // 2, n) != n - 1:
        return False

    a = pairpow((p, 1), (n + 1) // 2, d, n)
    if a[1] != 0:
        return False
    if a[0] != 1 and a[0] != n - 1:
        return False
    return True
    

n = 3317044064679887385961981
m = n // 2
print(isprime(3317044064679887385961981*3317044064679887385961981))

#for i in range (2, 44):
#    print (i, pow(i,m,n), jacobi(i,n))
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871219
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С куском отладочного кода в конце :)
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871223
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BarloneЭх, опять промахнулись... 3317044064679887385961981 - вот тут уже 43 надо.А вот и нет!

Здесь s = 2.
При s = 1 одни 1 и (n - 1) до 42.
А при s = 0 при 2 сразу составное!
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871231
Gennadiy Usov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BarloneПоторопился, если подсунуть квадрат очень большого числа, math.sqrt вычисляется с ошибкой, и в цикле поиска квадратичного невычета зависает...
Поправил.Спасибо!

А если пройтись по всем нечётным, где s = 1, и считать 1 и (n - 1) до "выбывания"?
...
Рейтинг: 0 / 0
Эвристический алгоритм (формула, тест простоты) для определения простых чисел
    #39871243
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BarloneGennadiy UsovВзял из вики описание теста Люка-Лемера и написал программу на Питоне.
На питоне? Да, хороший вариант для измерения скорости :)
В нашем случае это норм вариант. Тут-же принципиальная возможность изучается.
Перформанс - второе дело. Тем более что для Питона есть библиотеки поддержки длинных.
...
Рейтинг: 0 / 0
25 сообщений из 233, страница 7 из 10
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Эвристический алгоритм (формула, тест простоты) для определения простых чисел
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]