P8814 [CSP-J 2022] 解密

P8814 [CSP-J 2022] 解密

法一:暴力枚举

由于知道 p ∗ q = n p*q=n pq=n所以我们可以枚举 p = 1      − >   n , q = n p p=1~~~~->~ \sqrt{n},q=\frac{n}{p} p=1    > n ,q=pn
时间复杂度 O ( n k ) O(\sqrt{n}k) O(n k)
估计得分:50~60

法二: 数学

首先我们观察题面,(假设现在是有解情况)
n = p i ∗ q i , e i ∗ d i = ( p i − 1 ) ( q i − 1 ) + 1 n=p_i*q_i,e_i*d_i=(p_i-1)(q_i-1)+1 n=piqi,eidi=(pi1)(qi1)+1
我们把2式化简一下(以下下标自动省略)
e d = ( p − 1 ) ( q − 1 ) + 1 = p ( q − 1 ) − ( q − 1 ) + 1 = p q − p − q + 1 + 1 = n − ( p + q ) + 2 p + q = n − e d + 2 \begin{aligned} ed&=(p-1)(q-1)+1 \\ &=p(q-1)-(q-1)+1 \\ &=pq-p-q+1+1 \\ &=n-(p+q)+2 \\ p+q&=n-ed+2 \end{aligned} edp+q=(p1)(q1)+1=p(q1)(q1)+1=pqpq+1+1=n(p+q)+2=ned+2

综上
p q = n p + q = n − e d + 2 pq=n \\ p+q=n-ed+2 pq=np+q=ned+2
观察一下,发现,由于我们已经知道了p+q,所以只要知道p-q即可求出

大家还记得完全平方公式吗?

完全平方和:
( p + q ) 2 = p 2 + q 2 + 2 p q (p+q)^2=p^2+q^2+2pq (p+q)2=p2+q2+2pq
完全平方差:
( p − q ) 2 = p 2 + q 2 − 2 p q (p-q)^2=p^2+q^2-2pq (pq)2=p2+q22pq
我们用完全平方和-完全平方差:
( p + q ) 2 − ( p − q ) 2 = p 2 + q 2 + 2 p q − p 2 − q 2 + 2 p q = 4 p q ( p − q ) 2 = 4 p q + ( p + q ) 2 p − q = ( p + q ) 2 + 4 p q \begin{aligned} (p+q)^2-(p-q)^2&=p^2+q^2+2pq-p^2-q^2+2pq \\ &=4pq \\ (p-q)^2&=4pq+(p+q)^2 \\ p-q&=\sqrt{(p+q)^2+4pq} \end{aligned} (p+q)2(pq)2(pq)2pq=p2+q2+2pqp2q2+2pq=4pq=4pq+(p+q)2=(p+q)2+4pq
综上
p + q = n − e d + 2 p − q = ( p + q ) 2 + 4 p q 一式 + 二式得 2 p = n − e d + 2 + ( p + q ) 2 + 4 p q 2 p = n − e d + 2 + ( n − e d + 2 ) 2 + 4 n p = n − e d + 2 + ( n − e d + 2 ) 2 + 4 n 2 q = n − e d + 2 − n − e d + 2 + ( n − e d + 2 ) 2 + 4 n 2 \begin{aligned} &p+q=n-ed+2\\ &p-q=\sqrt{(p+q)^2+4pq}\\ &一式+二式得 \\ 2p&=n-ed+2+\sqrt{(p+q)^2+4pq}\\ 2p&=n-ed+2+\sqrt{(n-ed+2)^2+4n}\\ p&=\frac{n-ed+2+\sqrt{(n-ed+2)^2+4n}}{2}\\ q&=n-ed+2-\frac{n-ed+2+\sqrt{(n-ed+2)^2+4n}}{2} \end{aligned} 2p2ppqp+q=ned+2pq=(p+q)2+4pq 一式+二式得=ned+2+(p+q)2+4pq =ned+2+(ned+2)2+4n =2ned+2+(ned+2)2+4n =ned+22ned+2+(ned+2)2+4n

法三:二分

法三与法一类似,只是 p p p的枚举是用二分实现的
枚举 p p p通过 e d = ( p − 1 ) ( q − 1 ) + 1 ed=(p-1)(q-1)+1 ed=(p1)(q1)+1可以推导出 q = e d − 1 p − 1 + 1 q=\frac{ed-1}{p-1}+1 q=p1ed1+1
如果 p q < n pq<n pq<n,右移;反之左移

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CSP-J2022 是中国计算机学会(China Computer Federation, CCF)主办的全国计算机能力竞赛,是一项面向大学生的计算机科学竞赛。初赛题目以PDF格式发布,PDF是一种跨平台可移植文档格式,可以在不同操作系统和设备上进行查看和打印。初赛PDF包含了竞赛的相关信息,包括竞赛时间、地点、报名要求、参赛资料、题目要求和提交方式等。 CSP-J2022初赛PDF首先会介绍竞赛的背景和目的,对参赛者进行必要的说明。接下来会列出竞赛的各个环节和时间安排,包括笔试、机试等。参赛者需要根据PDF中的要求准备相应的资料,并按照规定的时间和方式提交。 竞赛题目通常会涉及到计算机科学的基础知识和编程能力。PDF中会给出具体的题目要求和答题格式,并提供样例输入输出供参赛者练习。参赛者需要下载并阅读PDF,理解题目要求,并根据要求进行编程实现。提交答案时,需要按照PDF中的指示提交到指定的在线评测系统中进行自动评测。 CSP-J2022 初赛PDF的发布是为了方便参赛者获取竞赛信息和题目要求,帮助参赛者做好充分的准备。参赛者需要仔细阅读PDF,理解竞赛的要求,合理安排学习时间,充分发挥自己的编程能力和思维能力。通过认真准备和实际操作,参赛者有机会在CSP-J2022竞赛中获得优异的成绩,并获得相关的荣誉和奖励。这也有助于提高参赛者的计算机技术水平和解决问题的能力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值