Я использую GMP (с MPIR) для типов данных произвольного размера. Я также использую его функцию проверки верности, которая использует метод Миллера-Рабина, но это не точно. Это то, что я хочу исправить.Быстрое испытание на соответствие с 100% уверенностью?
Я смог подтвердить, что число 18446744073709551253 является простым с использованием грубой силы с использованием подхода sqrt.
Есть ли способ проверить, что большие числа являются просто или нет, с точностью 100%?
Нельзя использовать слишком много памяти/места для хранения, допустимо принимать несколько мегабайт.
Он должен быть быстрее, чем метод sqrt, который я использовал.
Он должен работать для чисел размером не менее 64 бит или больше.
И, наконец, он должен быть на 100% точным, без майбелей!
Какие у меня варианты?
Я мог бы жить с методом грубой силы (для 64-битных чисел), хотя, но из интереса, я хочу быстрее & больше. Кроме того, проверка 64-битного номера была слишком медленной: всего 43 секунды!
Для чисел до '2^64', тест Baillie Pomerance Selfridge Wagstaff является надежным. Выше этого, APRCL или эллиптическая кривая. –
Для чего нужна точность 100%? Если целью вашей программы не является поиск больших простых чисел (не так, как нет программ для этого), я не вижу никаких приложений, где бесконечно малая вероятность быть неправильной не приемлема. – Grizzly
@ Grizzly, где мне это нужно? на мой взгляд, конечно :), если я создаю кнопку в программе, которая должна определить, является ли число простым или нет, раздражает слышать «возможно, это простое, я не знаю, спросите кого-нибудь еще!» : p – Rookie