#P2005. RSA加密算法
RSA加密算法
题目描述
擎小柱在休息时观看视频,了解了 RSA 加密算法:
*** RSA 加密算法核心要点 ***
RSA 是一种非对称加密算法,其安全性依赖于大整数分解的困难性:
- 密钥生成:用户生成公钥
(n, e)和私钥(n, d),其中:n是两个大质数p和q的乘积(即n = p * q)。e是公钥指数(与φ(n) = (p-1)(q-1)互质),d是私钥指数(满足e * d ≡ 1 mod φ(n))。
- 加密与解密:发送方用公钥加密消息
M为密文C = M^e mod n;接收方用私钥还原为M = C^d mod n。
擎小柱认为分解大整数 n 来推导私钥是不可能的,但他想用编程验证小数值的例子。于是,他收集了多组 RSA 公钥模数 n(每个 n 是两个质数的乘积),并希望你编写程序分解这些 n,找出对应的质因数。
任务
给定 N 个 RSA 公钥模数,每个模数 n 都可分解为两个质数 p 和 q(满足 n = p * q)。程序需对每个 n 输出质因数 p 和 q,按从小到大排序。
输入格式
- 第一行:一个整数
N(表示模数的数量,1 ≤ N ≤ 100)。 - 接下来
N行:每行一个整数n(表示 RSA 公钥模数,保证n为两个质数的乘积,4 ≤ n ≤ 10^6)。
输出格式
- 输出
N行,每行对应一个输入模数的分解结果。 - 每行输出两个质数
p和q,满足p ≤ q且n = p * q,p和q之间用单个空格分隔。
样例输入与输出
3
15
77
323
3 5
7 11
17 19
- 解释:第一个
n = 15分解为p = 3,q = 5(因3 * 5 = 15);其他行同理。
数据保证
- 每个
n严格由两个质因数组成(即p和q均质数,p可能等于q)。 - 输入整数均在指定范围内,分解结果唯一且存在。
- 输出必须按
p ≤ q排序,空格分隔。