hdu 1576 A/B(擴充套件歐幾里得)
阿新 • • 發佈:2019-01-28
思路:設(A/B)%9973 = K, 則A/B = k + 9973x (x未知), 因此A = kB + 9973xB,
又A%9973 = n, 所以kB%9973 = n, 故kB = n + 9973y (y未知)
故(k/n)B +(-y/n)*9973 = gcd(B,9973) = 1
擴充套件歐幾里得 求出k/n, 再乘以個n,記得取模,就是answer了
程式碼:
#include <stdio.h> #include <stdlib.h> #define m 9973 void Extend_gcd(int a,int b,int &x,int &y) { if(b==0) { x=1,y=0; return ; } Extend_gcd(b,a%b,x,y); int r=x; x=y; y=r-(a/b)*y; } int main() { int n,b,t,x,y; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&b); Extend_gcd(b,m,x,y); x=(x%m+m)%m; printf("%d\n",(x*n)%m); } return 0; }