「余姚中学 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 |
|