URAL 1204 Idempotents

2019-04-14 19:48发布

扩展欧几里得

题意:
给你一个数n,输出所有符合条件的正整数x,其中n=pq,p和q是两个不同的质数
条件:x*x%n=x

数据范围:
样例数<=1000,n<=10^9

思路:

原本打算O(√n)卡过去的,但数据组数卡了我...

首先认为题目的模就是模运算而不是同余,这样的话,不存在x>=n的答案,因为x*x模了n之后的值不可能大于等于n,x也不会是负数,因为x*x是正的,模n得到的答案不会是负。然后下面还会证明答案就是固定四个

x*x%n=x,就是存在整数k使得,x*x=kn+x,再变形变成x(x-1)=kpq,这个式子就有意思了。去除x是0或1这些特殊情况,这个等式意味着x整除p,x-1整除q,或者x整除q,x-1整除p。

就第一种的情况分析,得到x=sp,x-1=tq(s和t是整数)。相减得sp-tq=1,扩展欧几里得!求出s和t之后,调整s(加q或减q)使得它满足0<=s
你可以发现这时候s向上调整会使得sp>=n,s向下调整会使sp是负数。因此这里有且只会贡献一个解,而另一个情况会贡献另一个解,加上0和1,一共4个解,不存在重复解

先打好了质数表再分解n,暴力分解应该会TLE

总结:把式子变形,然后扩展欧几里得,调整系数得出答案