#P2005. RSA加密算法

RSA加密算法

题目描述

擎小柱在休息时观看视频,了解了 RSA 加密算法:

*** RSA 加密算法核心要点 ***

RSA 是一种非对称加密算法,其安全性依赖于大整数分解的困难性

  • 密钥生成:用户生成公钥 (n, e) 和私钥 (n, d),其中:
    • n 是两个大质数 pq 的乘积(即 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 都可分解为两个质数 pq(满足 n = p * q)。程序需对每个 n 输出质因数 pq,按从小到大排序。

输入格式

  • 第一行:一个整数 N(表示模数的数量,1 ≤ N ≤ 100)。
  • 接下来 N 行:每行一个整数 n(表示 RSA 公钥模数,保证 n 为两个质数的乘积,4 ≤ n ≤ 10^6)。

输出格式

  • 输出 N 行,每行对应一个输入模数的分解结果。
  • 每行输出两个质数 pq,满足 p ≤ qn = p * qpq 之间用单个空格分隔。

样例输入与输出

3
15
77
323
3 5
7 11
17 19
  • 解释:第一个 n = 15 分解为 p = 3, q = 5(因 3 * 5 = 15);其他行同理。

数据保证

  1. 每个 n 严格由两个质因数组成(即 pq 均质数,p 可能等于 q)。
  2. 输入整数均在指定范围内,分解结果唯一且存在。
  3. 输出必须按 p ≤ q 排序,空格分隔。