[ACM]【模板/逆元/擴歐】HDU1576 A/B

A/B

傳送門
在這裏插入圖片描述

思路:

水題。
A/Bx(mod9973)A/B\equiv x \pmod {9973}
因爲(B,9973)=1(B,9973)=1
所以ABx(mod9973)A\equiv Bx\pmod{9973}
B1Ax(mod9973)B^{-1}A\equiv x\pmod{9973}
而我們已知BB,就可以求B1B^{-1}
又有An(mod9973)A\equiv n\pmod{9973}
所以B1nx(mod9973)B^{-1}n\equiv x\pmod{9973}

代碼:

用擴歐實現

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void ex_gcd(ll a,ll b,ll &x,ll &y){
	if(b==0){
		x=1,y=0;
		return ;
	}
	ex_gcd(b,a%b,y,x);
	y-=a/b*x;
}
ll mod_inverse(ll a,ll m){
	ll x,y;
	ex_gcd(a,m,x,y);
	return (m+x%m)%m;//最小正整數解
}
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		ll n,b;
		scanf("%lld%lld",&n,&b);
		ll b_inv=mod_inverse(b,9973);
		printf("%d\n",n*b_inv%9973);
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章