标签:
题目抽象:给出n,B. n=A%9973,gcd(B,9973)=1. 求(A/B)%9973.思路:A是未给出的量,需要用其他量来表示它。设A/B=x,即A=B*x; y=A/9973.
n=A-A/9973*9973=B*x-9973*y=n;(**) 。
gcd(B,9973)=1=B*x1+9973*y1;(*)
将(*)左右两边乘以n 得到 B*(n*x1)-9973*(-n*y1)=n;只需求出x1就可以了
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <algorithm> 6 using namespace std; 7 8 void ex_gcd(int a,int b,int &d,int &x,int &y) 9 { 10 if(b==0) 11 { 12 x=1;y=0;d=a; 13 } 14 else 15 { 16 ex_gcd(b,a%b,d,y,x); 17 y-=(a/b)*x; 18 } 19 } 20 21 int main() 22 { 23 int T,b,n; 24 int x,y,d; 25 scanf("%d",&T); 26 while(T--) 27 { 28 scanf("%d%d",&n,&b); 29 ex_gcd(b,9973,d,x,y); 30 x*=n; // x可能为负数 31 printf("%d\n",(x%9973+9973)%9973); 32 } 33 return 0; 34 }
标签:
原文地址:http://www.cnblogs.com/hutaishi/p/4486408.html