[十二省联考2019]骗分过样例

泄露秘密 提交于 2019-12-03 03:02:20

传送门

  这道题是个毒瘤题,花费了博主1day独立解决了16个子任务。下面步入正题。

  \(\text{subtask 1-3:1_998244353}\)

  这个观察数据不难得出要求\(19^x\bmod 998244353\),直接搞即可。注意到可能\(x\)非常大,根据费马小定理\(x^{P-1} \equiv 1 \pmod P\),我们需要读入取模

  \(\text{subtask 4:1?}\)

  观察数据和提示告诉我们:仍然求\(19^x\),只不过模数不知道。发现输出文件的最大值在\(10^6\)左右,我们拿第一个输入直接爆搜检验,最后能找出来\(P=1145141\)

  \(\text{subtask 5:1?+}\)

  这个是前一个的加强版,发现模数在\(5\times 10^{18}\)左右,这个不好暴力了。怎么办呢?我把输入的数排了个序,发现有两组输入的\(x\)之差为\(2\),于是我找到这两组对应的输出,得到了:\(19^{264708066}\equiv 1996649514996338529 \pmod P\)\(19^{264708068}\equiv 1589589654696467295 \pmod P\)。也就是说上面的式子乘上\(19^2\)再取模就能得到下面的数字,于是我们得到了:\(1996649514996338529\times 19^2 \equiv 1589589654696467295 \pmod P\)。然后改写这个式子:\(1996649514996338529\times 361-nP=1589589654696467295\),把常数移到右边,发现在\(long\ long\)范围内无法算出,我用\(long\ double\)算出了近似值。然后\(P\)一定是这个数的一个因子。发现\(n\)\(100\)\(200\)左右,就暴力试除,考虑到精度又将\(\pm 1000\)的模数用第一组输入输出判断了一下,最后找到了模数\(P=5211600617818708273\)

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!