#P4358. [CQOI2016] 密钥破解

    ID: 3289 远端评测题 1000ms 500MiB 尝试: 0 已通过: 0 难度: 6 上传者: 标签>2016重庆各省省选递归素数判断质数筛法逆元

[CQOI2016] 密钥破解

题目描述

一种非对称加密算法的密钥生成过程如下:

1.任选两个不同的质数p,qp,q

2.计算N=p×qN=p \times qr=(p1)(q1)r=(p-1)(q-1)

3.选取小于rr,且与rr互质的整数ee

4.计算整数dd,使得ed1(modr)ed≡1(mod r)

5.二元组(N,e)(N,e)称为公钥,二元组(N,d)(N,d)称为私钥。

当需要加密消息nn时,(假设nn是一个小于NN的整数,因为任何格式的消息都可转为整数表示),使用公钥(N,e)(N,e),按照

nec(modN)n^e≡c(mod N)

运算,可得到密文cc

对密文cc解密时,用私钥(N,d)(N,d),按照

cdn(modN)c^d≡n(mod N)

运算,可得到原文 nn。算法正确性证明省略。

由于用公钥加密的密文仅能用对应的私钥解密,而不能用公钥解密,因此称为非对称加密算法。通常情况下,公钥由消息的接收方公开,而私钥由消息的接收方自己持有。这样任何发送消息的人都可以用公钥对消息加密,而只有消息的接收方自己能够解密消息。

现在,你的任务是寻找一种可行的方法来破解这种加密算法,即根据公钥破解出私钥,并据此解密密文。

输入格式

输入文件内容只有一行,为空格分隔的三个正整数e,N,ce,N,c

输出格式

输出文件内容只有一行,为空格分隔的两个整数d,nd,n

3 187 45
107 12

提示

对于30%30\%的数据,e,N,c220e,N,c \le 2^{20}

对于100%100\%的数据,e,N,c262,c<Ne,N,c \le 2^{62},c<N