您的位置:首页 > 其它

URAL 1204 Idempotents

2015-11-04 14:05 225 查看
扩展欧几里得

题意:

给你一个数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<q,然后这时候的sp就是一个答案。

你可以发现这时候s向上调整会使得sp>=n,s向下调整会使sp是负数。因此这里有且只会贡献一个解,而另一个情况会贡献另一个解,加上0和1,一共4个解,不存在重复解

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

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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Ural