题目链接:Problem - 1576 (hdu.edu.cn)
题目:
题目样例:
题目思路:
因为b的范围在1--1e9。除以一个很大的数会有精度问题,所以需要逆元(将除法变成乘法)。
扩展欧几里得求逆元模板:
int ex_gcd(int a,int b,int &x,int &y){
if(b==0){
x=1;
y=0;
return a;
}
int d=ex_gcd(b,a%b,x,y);
int temp=x;
x=y;
y=temp-(a/b)*y;
return d;
}
ps:函数进行的结果x为a的逆元,b为mod数
AC:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e5+5;
int t,a,b,x,y;
int ex_gcd(int a,int b,int &x,int &y){
if(b==0){
x=1;
y=0;
return a;
}
int d=ex_gcd(b,a%b,x,y);
int temp=x;
x=y;
y=temp-(a/b)*y;
return d;
}
int main(){
cin>>t;
while(t--){
cin>>a>>b;
ex_gcd(b,9973,x,y);
x=(x%9973+9973)%9973;
cout<<(a*x)%9973<<endl;
}
return 0;
}