guess_number3

懒得贴交互的图了

非预期

证明

先说说非预期吧,这个我确实是疏忽了,也导致过的大部分人都是这么做的。
先从费马小定理定理出发:

费马小定理和欧拉定理类似,对于上面式子而言欧拉定理为,因为的欧拉函数为

现在将式子变一下看看:

说人话

当输入式子为时,绝对值加就是,即:

预期一

证明

对于而言有:

大家注意一下这个式子,只有在模 的因数下它才等于2,如果我模的是 的倍数,比如说 会发生下面这种情况
再给模
很神奇的事发生了,再对式子变一下形
那么p即可得到:

gcd是求最大公因数的意思,python里也有现成的函数,用不着自己实现,但我还是用的sagemath

说人话

输入,得到的分别减去后求最大公因数。

别的构造方法也是OK的,核心就是求最大公因数

预期二

请见guess_number3.5,这个是当时突然想到的,所以在比赛最后一天才出guess_number3.5,想用guess_number3.5看看过了guess_number3的有没有用这种方法。