Тест Люка-Лемера для больших чисел (C#, BigInteger)
От: tapatoon  
Дата: 13.05.22 12:49
Оценка:
Хочу тестировать простые числа (BigInteger) для ключей этим тестом.
Согласно формуле, надо возводить в степень, которая этот самый BigInteger.
Формула: ((S * S) — 2) mod ((2 в степени P) — 1)
S и P — BigInteger

Есть мысли как модифицировать алгоритм, чтобы избежать возведения в BigInteger?
Центр ИПсО Сил Специальных Операций
Re: Тест Люка-Лемера для больших чисел (C#, BigInteger)
От: Jack128  
Дата: 13.05.22 13:54
Оценка:
Здравствуйте, tapatoon, Вы писали:

T>Хочу тестировать простые числа (BigInteger) для ключей этим тестом.

T>Согласно формуле, надо возводить в степень, которая этот самый BigInteger.
T>Формула: ((S * S) — 2) mod ((2 в степени P) — 1)
T>S и P — BigInteger

T>Есть мысли как модифицировать алгоритм, чтобы избежать возведения в BigInteger?


Сори, если косячу, нифига не математик, но возникли такие вопросы:

1. А формула точно правильная ?? В вики написано , то есть формула рекурсивная. У тебя на рекурсию не похоже.
2. Ну и потом, ну узнаешь ты что
(2 в степени P) - 1

— простое. Но из этого никак не следует, что P — простое.
Re[2]: Тест Люка-Лемера для больших чисел (C#, BigInteger)
От: tapatoon  
Дата: 13.05.22 14:22
Оценка:
Здравствуйте, Jack128, Вы писали:

J>1. А формула точно правильная ?? В вики написано Image: 8e5e1f907d128b278f05db9de7333f353939a8d0 , то есть формула рекурсивная. У тебя на рекурсию не похоже.

Я привёл одну итерацию, для тех кому лень в вики лезть)

J>2. Ну и потом, ну узнаешь ты что

J>
J>(2 в степени P) - 1
J>

J> — простое. Но из этого никак не следует, что P — простое.
Это часть теста Baillie–PSW
Центр ИПсО Сил Специальных Операций
Re: Тест Люка-Лемера для больших чисел (C#, BigInteger)
От: · Великобритания  
Дата: 13.05.22 14:43
Оценка: +1
Здравствуйте, tapatoon, Вы писали:

T>Есть мысли как модифицировать алгоритм, чтобы избежать возведения в BigInteger?

Я не вникал во всё, но как я вижу, надо посчитать "(2 в степени P) — 1", что в двоичном представлении это просто P штук единичек.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[2]: Тест Люка-Лемера для больших чисел (C#, BigInteger)
От: tapatoon  
Дата: 13.05.22 20:17
Оценка:
Здравствуйте, ·, Вы писали:

·>Я не вникал во всё, но как я вижу, надо посчитать "(2 в степени P) — 1", что в двоичном представлении это просто P штук единичек.

P примерно такое
{19584106937020209507252196043297899606150639594416573557601370358302595836899772763205901129028954253483656445869547157319442256987763485808630622731204702607725304393672091646626749217866856236614781071343335368281674035542300870799724013621718522337194406278051898707772888933820787591547643270817723404207636919984151269871568007568822372805185851967813940320287551137630460923721251805035039852013906842135318027582470859284202772189656126810755021790465171190932742377989915465879887469418270460930383147520271548662431286278669215961025807979940711940934567245768381839828712412737383163503304221271112074852003}
Центр ИПсО Сил Специальных Операций
Re[3]: Тест Люка-Лемера для больших чисел (C#, BigInteger)
От: · Великобритания  
Дата: 13.05.22 22:12
Оценка:
Здравствуйте, tapatoon, Вы писали:

T>·>Я не вникал во всё, но как я вижу, надо посчитать "(2 в степени P) — 1", что в двоичном представлении это просто P штук единичек.

T>P примерно такое
Ах, ну так тебе значит надо не просто в степень P возвести, а использовать результат в делении по модулю. И в той же вики написано:

Эффективный алгоритм деления по модулю числа Мерсенна на компьютере (фактически сводящийся к нескольким операциям битового сдвига) дает следующая теорема...

. Осталось разобраться в этой теореме.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[3]: Тест Люка-Лемера для больших чисел (C#, BigInteger)
От: kov_serg Россия  
Дата: 14.05.22 07:34
Оценка:
Здравствуйте, tapatoon, Вы писали:

T>·>Я не вникал во всё, но как я вижу, надо посчитать "(2 в степени P) — 1", что в двоичном представлении это просто P штук единичек.

T>P примерно такое
T>{19584106937020209507252196043297899606150639594416573557601370358302595836899772763205901129028954253483656445869547157319442256987763485808630622731204702607725304393672091646626749217866856236614781071343335368281674035542300870799724013621718522337194406278051898707772888933820787591547643270817723404207636919984151269871568007568822372805185851967813940320287551137630460923721251805035039852013906842135318027582470859284202772189656126810755021790465171190932742377989915465879887469418270460930383147520271548662431286278669215961025807979940711940934567245768381839828712412737383163503304221271112074852003}
Вам явно нужны другие методы для такого p
https://www.mersenne.org/primes/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.