「余姚中学 2019 联测 Day 6」解码
「余姚中学 2019 联测 Day 6」解码
先不考虑求$p,q$
根据人人都知道的欧拉定理$x^c\equiv x^{c\mod \varphi(n)} (\mod n)$
那么$\varphi(n)=(p-1)(q-1)$,而$(c,\varphi(n))=1$
所以求出$\frac{1} {c} \pmod {\varphi(n)}$
带入原来的式子$(x^c)^{\frac{1} {c}\pmod {\varphi(n)} }\equiv x^1\pmod n$
即$x=m^{\frac{1} {c}\pmod {\varphi(n)} }\pmod n$
求逆最好用扩展欧几里得算法,复杂度为$O(\log n)$
那么直接快速幂即可,但是如果快速幂套快速乘复杂度为$O(\log ^2)$,实际常数极大,很有可能超时(如果用long double O(1)快速乘另谈。。。)
由于知道$p,q$可以分别求出$m^{\frac{1} {c}\pmod {\varphi(n)} }\pmod p$,$m^{\frac{1} {c}\pmod {\varphi(n)} }\pmod q$
然后中国剩余定理合并,即$O(\log n)$
现在问题是求$p,q$
对于前3档分,由于素数密度是$O(\log n)$的,所以$\sqrt n -p$期望只有$\log n$
而对于最后一档分,考虑更好表示,枚举$p+q$解出答案,发现
$4n\leq (p+q)^2= (q-p)^2+4pq\leq \lambda^2+4n$
即$2\sqrt{n}\leq (p+q)\le \sqrt{\lambda^2+4n}$
由于$n\ge p^2\ge 10^{18},\lambda \leq 3\cdot 10^5$,这个范围实际非常非常非常非常小,大概只有$22$
tips:实际上$4n$可能爆long long
枚举$p+q$之后,$O(1)$解出$p,q$即可
竟然有人问怎么解$p,q$,我震惊了
$q-p=\sqrt{(p+q)^2-4n}$,然后判一下是不是整数就好了
写的时候害怕sqrt炸精度,很多奇怪的语句请忽略
1 |
|