题目分析
首先对于
式 1 : n = p q , 式1:n=pq, 式1:n=pq,
式 2 : e d = ( p − 1 ) ( q − 1 ) + 1 式2:ed=(p-1)(q-1)+1 式2:ed=(p−1)(q−1)+1,
可以进行化简。
式 3 : e d = p q − p − q + 2 式3:ed=pq-p-q+2 式3:ed=pq−p−q+2
将 式 1 式1 式1带入 式 3 式3 式3得,
式 4 : e d = n − p − q + 2 式4:ed=n-p-q+2 式4:ed=n−p−q+2
整理易得:
式 5 : n − e d + 2 = p + q 式5:n-ed+2=p+q 式5:n−ed+2=p+q
由 式 5 式5 式5得
p = n − e d − q + 2 p=n-ed-q+2 p=n−ed−q+2
思路
枚举法
50分
考虑在区间 [ 1 , n − e d ] [1,n-ed] [1,n−ed]中枚举一正整数 q q q,从而算出 p p p值,使得 ( p − 1 ) ( q − 1 ) + 1 = e d (p-1)(q-1)+1=ed (p−1)(q−1)+1=ed
时间复杂度: O ( k n ) O(kn) O(kn)
100分
考虑到区间 [ 1 , n − e d ] [1,n-ed] [1,n−ed]满足单调性,可采取二分优化求解。
时间复杂度: O ( k log 2 n ) O(k \log_{2}{n}) O(klog2n)
数学法
因为
p
=
n
−
e
d
−
q
p=n-ed-q
p=n−ed−q,结合
式
1
式1
式1得
q
(
n
−
e
d
−
q
+
2
)
=
n
q(n-ed-q+2)=n
q(n−ed−q+2)=n
由乘法分配律得
−
p
2
+
p
(
n
−
e
d
+
2
)
=
n
-p^2+p(n-ed+2)=n
−p2+p(n−ed+2)=n
显然此为一元二次方程,
根据公式可知根为:
−
(
n
−
e
d
+
2
)
±
(
n
−
e
d
+
2
)
2
−
4
n
−
2
\frac{-(n-ed+2)\pm \sqrt{(n-ed+2)^2-4n}}{-2}
−2−(n−ed+2)±(n−ed+2)2−4n
其中
(
n
−
e
d
+
2
)
2
−
4
n
(n-ed+2)^2-4n
(n−ed+2)2−4n若为负数,则方程无实数解,输出NO
否则由于
p
<
q
p<q
p<q,
所以:
p
=
−
(
n
−
e
d
+
2
)
−
(
n
−
e
d
+
2
)
2
−
4
n
−
2
p=\frac{-(n-ed+2)- \sqrt{(n-ed+2)^2-4n}}{-2}
p=−2−(n−ed+2)−(n−ed+2)2−4n,
q
=
−
(
n
−
e
d
+
2
)
+
(
n
−
e
d
+
2
)
2
−
4
n
−
2
q=\frac{-(n-ed+2)+ \sqrt{(n-ed+2)^2-4n}}{-2}
q=−2−(n−ed+2)+(n−ed+2)2−4n
需要注意的是,由于浮点数运算存在误差,所以算出的 p , q p,q p,q得判断是否满足条件。
时间复杂度: O ( k ) O(k) O(k)
代码
枚举法
数学法
100分代码:点击此处