hdu 1576 A/B 欧几里德算法的扩展

A/BTime Limit: 1000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2580Accepted Submission(s): 1884

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

21000 5387 123456789

Sample Output

79226060

Author

xhd

一个数论题目欧几里德扩展运算n=A%9973 就有 n=A-9973*rA%B==0 A=l*B(A/B)%9973 ans= l%9973所以有 ans=l-m*9973其中ans就是我们需要的答案A=L*B=n+9973*r=B*(ans+m*9973)n+9973*r=B*ans+9973*m*Bn-B*ans=(m*B-r)*9973所以只要枚举(n-B*ans)%9973==0 就可以了

代码:

#include <stdio.h>int main(){int t ;scanf("%d",&t) ;while(t–){long long n , b ;scanf("%I64d%I64d",&n,&b) ;for(int i = 0 ; i < 9973 ; ++i){if((n-b*i)%9973 == 0){printf("%d\n",i) ;break ;}}}return 0 ;}与君共勉

未经一番寒彻骨,焉得梅花扑鼻香

hdu 1576 A/B 欧几里德算法的扩展

相关文章:

你感兴趣的文章:

标签云: