SP5144 CRYPTO6 - Cryptography Reloaded (Act I)

题目描述

ICPC(密码编程与计算研究所)的研究人员在闲暇时都在做些什么呢?没错,除了在在线评测系统上解决算法问题,他们还常常研究各种密码方案。最近,研究员Tom对手持设备中的RSA算法实现产生了浓厚的兴趣。 RSA算法的基本原理如下: 1. 选择两个不同的素数 $p$ 和 $q$,令 $n = p \times q$; 2. 选择一个整数 $e$,使得 $\gcd(e, (p - 1)(q - 1)) = 1$; 3. 计算整数 $d$,满足同余关系 $de \equiv 1 \pmod{(p - 1)(q - 1)}$。 这样,当某人A希望另一个人B以加密方式传递消息给他时,A可以按照上述步骤生成他的公钥 $(n, e)$ 并公开。接收到A的公钥后,B只需通过计算 $y = x^e \mod n$ 来加密消息 $x$(使得 $0 \le x < n$)。这样生成的加密消息理想状态下只有A能够使用他的私钥 $d$ 解密,即 $x = y^d \mod n$。 考虑到手持设备的计算能力通常有限,因此加密时常使用较小的 $e$ 值,这可能导致安全风险。例如,当同时拥有公钥 $(n, e)$ 和私钥 $d$ 时,恢复诸如 $p$ 和 $q$ 的素数(即分解 $n$)是较为简单的过程。你能帮助Tom编写一个程序来演示这一过程吗?

输入格式

输入文件包含多个测试用例。 每个测试用例由三个整数 $n$、$d$ 和 $e$ 组成($n \le 10^{100}, 3 \le e \le 31$)。请注意,这些数没有前导零,并且满足题中的条件。 两个连续的测试用例之间用一个空行分隔。当出现 $n = 0$、$d = 0$ 和 $e = 0$ 时,表示输入结束,此时程序不应进行处理。

输出格式

对于每个测试用例,请输出两个素数 $p$ 和 $q$,使得 $n = pq$ 且 $p < q$: ``` Case #X: p q ``` 其中 `X` 是测试用例的编号(从1开始),`p` 和 `q` 是满足条件的素数。

说明/提示

- $n \le 10^{100}$ - $3 \le e \le 31$ **本翻译由 AI 自动生成**