|
A/BTime Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7034 Accepted Submission(s): 5595
Problem Description
要求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1)。
Input
数据的第一行是一个T,表示有T组数据。
每组数据有两个数n(0 <= n < 9973)和B(1 <= B <= 10^9)。
Output
对应每组数据输出(A/B)%9973。
Sample Input
Sample Output
Author
xhd
Source
Recommend
分析:求逆元裸题,(a/b)%9973 , b*x==1%9973(同余) ---->(a/b*b*x)=(a*x)%9973
有两种方法,一是利用费马小定理a^(p-1)==1%p(同余 ,a与p互质),但是要求p为素数,这里9973为素数;二是利用扩展欧几里得算法 ax+by=1,其中a,b互质,即ax==1%b(同余),因为(m/a)%b = ( m/a*a*x)%b = 1;所以x可以作为a的逆元,同理y是b的逆元,这里不要求模数为质数,拓展欧几里得算法中是是利用辗转相除逆向地递推出x,y的值,此处不做详解,具体过程就是解一个同余方程。
代码一:(费马小定理)
代码二:(扩展欧几里得)
|
hdu 1576 A/B(求逆元模板题)
最新推荐文章于 2022-09-14 09:09:51 发布