• Предмет: Информатика
  • Автор: kittenk17
  • Вопрос задан 10 месяцев назад

RSA — криптографическая система, где важную роль играют числа вида n = pq, где p и q —
различные простые числа. Число n называют модулем RSA и используют для дальнейших вычислений.
Стойкость RSA основана на том факте, что для известного числа n не известно достаточно
быстрого алгоритма разложения n на множители для достаточно длинных чисел n (от 1024 бит и
больше). При этом, рекомендуется выбирать p и q большими случайными простыми числами примерно
одинаковой длины. Генерация таких n — процесс, требующий аккуратности и понимания
происходящего. Существует большое количество атак на ключи RSA, которые были сгенерированы
ненадлежащим образом. Знание других деталей реализации RSA для этой задачи не понадобится.
Прочитав, что в RSA используют близкие простые числа, Карл реализовал свой алгоритм генерации:1. Сгенерировать случайное простое число p1, состоящее из b бит.
2. Начиная с p1 + 1, перебрать все числа подряд по возрастанию, пока не встретим следующее
простое число p2.
3. Выдать n = p1p2.
Поскольку выбирается случайное простое число p1, а в среднем расстояние между соседними
простыми числами невелико, этот алгоритм достаточно быстро найдет следующее простое число p2.
Друг Карла Пьер обнаружил, что числа, которые выдает алгоритм Карла, можно быстро разложить
на делители. Поэтому Пьер предложил брать не два простых числа, а четыре! Независимо от p1 мы
также выберем случайное b-битное простое число q1 и следующее за ним простое число q2 и возьмем
n = p1p2q1q2. Однако такой способ генерации тоже оказался уязвим: число n возможно разложить
на множители.
Вам дано число n, сгенерированное либо изначальным методом Карла с 2 простыми множителями,
либо с обновленным методом Пьера с 4 простыми множителями. Разложите его на простые
множители.
Формат входных данных
В первой строке заданы два числа b и k (4<=b<=60, k = 2 или k = 4). В следующей строке
содержится число n в шестнадцатеричной системе счисления, от старших разрядов к младшим, без
ведущих нулей.
Гарантируется, что n является произведением ровно k простых множителей, сгенерированных
случайно одним из двух методов, описанных в условии. Каждый из этих множителей состоит ровно
из b бит в двоичной системе счисления, все множители различны.
Формат выходных данных
Выведите k простых множителей n в шестнадцатеричной записи без ведущих нулей, по одному
в каждой строке.

Ответы

Ответ дал: Аноним
0

int main()

{

setlocale(LC_ALL, "Russian");

const int n = 5; //определяем константу

float c = 1, f = 0;

int p[n];

cout << "Введи любые пять цифр через пробел:", '\n';

for (int a = 0; a <= n - 1; a++)  

{

cin >> p[a];

}

for (int a = 0; a <= n - 1; a++)

{

if ((p[a] == 0) & (p[a + 1] != 0))

{

do

{

a = a + 1;

c = p[a] * c;

} while (p[a + 1] != 0);

break;

}

}

cout << "Произведение:" << endl;

cout << c << endl;

}

Вас заинтересует