hdu1576(扩展gcd求乘法逆元)
A/B
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7509 Accepted Submission(s): 5969
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)。
每组数据有两个数n(0 <= n < 9973)和B(1 <= B <= 10^9)。
Output
对应每组数据输出(A/B)%9973。
Sample Input
2
1000 53
87 123456789
Sample Output
7922
6060
分析:用扩展欧几里得算法求乘法逆元(模逆元)。
#include<cstdio> long long exgcd(long long a,long long b,long long &x,long long &y) { if(b==0) { x=1; y=0; return a; } long long r=exgcd(b,a%b,x,y); long long t=x; x=y; y=t-a/b*y; return r; } int main() { int T; long long N,B,p=9973; scanf("%d",&T); while(T--) { scanf("%lld%lld",&N,&B); long long x,y; long long r=exgcd(B,p,x,y); printf("%lld\n",N*((x%p+p)%p)%p); } return 0; }
作者:ACRykl —— O ever youthful,O ever weeping!
出处:http://www.cnblogs.com/ACRykl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。