Сайт не дает загрузить текст программы даже текстовым файлом, поэтому вставляю картинкой.
Программа должна запускаться с единственным аргументом, определяющем режим работы: encrypt (зашифрование) или decrypt (расшифрование). Если аргумент не указан, по умолчанию используется зашифрование.
Ключом шифрования является целое число из диапазона [1; 100]. При зашифровании ключ генерируется автоматически, используя стандартный генератор случайных чисел. При расшифровании ключ вводится с клавиатуры.
Шифртекст представляет собой последовательность целых чисел, разделенных пробелом. Рассматривать шифртекст в виде последовательности символов неудобно, потому что часть символов являются непечатными. Можно сказать, что входной и выходной алфавиты шифра замены различаются (в задании ограничений на это не увидел).
var res: BigInteger := BigInteger.Add(BigInteger.Add(BigInteger.Add(BigInteger.Pow(BigInteger.Parse('2'),102),BigInteger.Pow(BigInteger.Parse('2'),100)),BigInteger.Pow(BigInteger.Parse('2'),85)),BigInteger.Pow(BigInteger.Parse('2'),17));
Сайт не дает загрузить текст программы даже текстовым файлом, поэтому вставляю картинкой.
Программа должна запускаться с единственным аргументом, определяющем режим работы: encrypt (зашифрование) или decrypt (расшифрование). Если аргумент не указан, по умолчанию используется зашифрование.
Ключом шифрования является целое число из диапазона [1; 100]. При зашифровании ключ генерируется автоматически, используя стандартный генератор случайных чисел. При расшифровании ключ вводится с клавиатуры.
Шифртекст представляет собой последовательность целых чисел, разделенных пробелом. Рассматривать шифртекст в виде последовательности символов неудобно, потому что часть символов являются непечатными. Можно сказать, что входной и выходной алфавиты шифра замены различаются (в задании ограничений на это не увидел).
Пример работы программы в режиме зашифрования:
% python3 cipher.py encrypt
Running in encryption mode
Plaintext: Щёткин Сергей Викторович
Key: 41
Ciphertext: 1106 1146 1131 1123 1121 1126 73 1098 1118 1129 1116 1118 1122 73 1083 1121 1123 1131 1127 1129 1127 1115 1121 1136
Пример работы программы в режиме расшифрования:
% python3 cipher.py decrypt
Running in decryption mode
Ciphertext: 1106 1146 1131 1123 1121 1126 73 1098 1118 1129 1116 1118 1122 73 1083 1121 1123 1131 1127 1129 1127 1115 1121 1136
Key: 41
Plaintext: Щёткин Сергей Викторович
(см. объяснение)
Объяснение:
Ниже показано решение на различных языках программирования + аналитический метод.
Java:
System.out.println(BigInteger.valueOf(2).pow(102).add(BigInteger.valueOf(2).pow(100)).add(BigInteger.valueOf(2).pow(85)).add(BigInteger.valueOf(2).pow(17)).toString(8));
Pascal:
##
var res: BigInteger := BigInteger.Add(BigInteger.Add(BigInteger.Add(BigInteger.Pow(BigInteger.Parse('2'),102),BigInteger.Pow(BigInteger.Parse('2'),100)),BigInteger.Pow(BigInteger.Parse('2'),85)),BigInteger.Pow(BigInteger.Parse('2'),17));
var s: string := '';
while(not res.IsZero) do
begin
s:= BigInteger.Remainder(res,8).ToString+s;
res:= BigInteger.Divide(res,BigInteger.Parse('8'));
end;
writeln(s);
Python:
a = 2**102+2**100+2**85+2**17
s = ''
while(a>0):
s=str(a%8)+s
a//=8
print(s)
Аналитический метод:
Нужно представить все, как <число>*8^[степень]. Заметим, что:
Результат полученный во всех случаях одинаковый:
12000020000000000000000000000400000
Это означает, что всего в числе встречается 4 различные цифры.
Задание выполнено!