на школьную страницу...

Проверка чисел на простоту

Е.А.Абалина Проверка чисел на простоту с помощью метода Лукаса-Лемера Бакалаврская работа, 2012 г.

Е.A.Павлычева Проверка чисел на простоту с помощью метода Миллера - Рабина Бакалаврская работа, 2012 г.
(выпускница шк. №15 г.Иваново).

Научный руководитель С.И.Хашин

Проверка на простоту - важнейшая задача современной криптографии. Когда клиент отправляет в банк электронное платежное поручение, он ставит под ним свою электронную подпись. Для каждого документа подпись своя, не совпадает с подписями под другими документами. И при вычислении элктронной подписи, и при её проверке нельзя обойтись без простых чисел.

Простые числа - это те, которые не делятся ни на что, кроме 1 и самого себя. Это числа 2, 3, 5, 7 и так далее.

Ясно, что число 17 - простое. Почему? Да не делится оно ни на что.

А 101 ? Тоже простое. Оно не делится на 2, 3, 5, 7, 11. Стоп! А дальше проверять не будем. Если 101 делится на некоторое число p, обзначим частное через q, тогда 101=p*q. Не могут оба множителя, p и q быть больше 10. То есть, если бы у 101 были делители, то был бы делитель меньший 10.

То есть для проверки числа N на простоту, надо проверять его делимость на все простые числа, меньшие .

А вот, например, в ГОСТ 34.10-2012 (стандарт на электронную подпись) разработчик системы должен найти простое число q, удовлетворяющее некоторым условиям и лежащее в пределах

2254 < q < 2256.

В качестве примера, в ГОСТе предлагается число

q=57896044618658097711785492504343953927082934583725450622380973592137631069619.

А оно точно простое? Как проверить? Вы действительно собираетесь делить на все простые числа, вплоть до ...? Нет ли какого другого способа?

Конечно, есть. Например в языке Java имется класс BigInteger работающий с целыми числами произвольной длины. И у этого класса есть метод isProbablePrime, проверяющий будет ли число простым. Probable - значит "вероятно", то есть Java не дает 100% гарантии, что число простое. На самом деле, полного решения у этой задачи до сих пор нет. Поэтому и приходится довольствоваться ответом типа "число q скорее всего, простое". Хотя вероятность ошибки так мала, что ею можно спокойно пренебречь.

Как же язык Java проверяет числа на простоту? Для этого используется комбинация двух методов: метод Миллера-Рабина и метод Лукаса-Лемера.

Изучению особенностей реализации этих двух методов в языке Java и посвящены эти две работы.






Flag Counter