hdu1576 A/B(扩展的欧几里德算法)
Posted 沐茈静
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu1576 A/B(扩展的欧几里德算法)相关的知识,希望对你有一定的参考价值。
|
A/BTime Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1369 Accepted Submission(s): 1045 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 2 1000 53 87 123456789 Sample Output 7922 6060 题解: 因为:题目已知n和B,又知gcd(B,9973) = 1, 且n=A%9973,需要求(A/B)%9973, 由于不知道A,所以需要把A替换掉, 所以设 ans=(A/B)%9973 …… (1) (1)式中 存在x使得 A/B=9973x+ans, …… (2) (2) 式中两边同时乘上B,得 A=9973*B*x+ans*B …… (3) 又因n=A%9973, 一定存在y使得 n=A-9973*y …… (4) 把(3)代入(4)得 n=9973*B*x+ans*B -9973*y 合并得 n=ans*B +(B*x-y)9973 …… (5) 又有 gcd(B,9973) = 1,所以(5)式两边同时除以n,得 1=ans/n*B+(B*x-y)/n*9973 就可以看成ax+by=1的形式, 运用扩展的欧几里德算法求出ans/n, 此时a=B,b=9973,x=ans/n; 所以套用扩展的欧几里德算法模版求出x,然后再乘上n,即可得出结果ans=(A/B)%9973; 代码实现:
|
以上是关于hdu1576 A/B(扩展的欧几里德算法)的主要内容,如果未能解决你的问题,请参考以下文章