[ACM]【模板/逆元/扩欧】HDU1576 A/B

A/B

传送门
在这里插入图片描述

思路:

水题。
A / B ≡ x ( m o d 9973 ) A/B\equiv x \pmod {9973} A/Bx(mod9973)
因为 ( B , 9973 ) = 1 (B,9973)=1 (B,9973)=1
所以 A ≡ B x ( m o d 9973 ) A\equiv Bx\pmod{9973} ABx(mod9973)
B − 1 A ≡ x ( m o d 9973 ) B^{-1}A\equiv x\pmod{9973} B1Ax(mod9973)
而我们已知 B B B,就可以求 B − 1 B^{-1} B1
又有 A ≡ n ( m o d 9973 ) A\equiv n\pmod{9973} An(mod9973)
所以 B − 1 n ≡ x ( m o d 9973 ) B^{-1}n\equiv x\pmod{9973} B1nx(mod9973)

代码:

用扩欧实现

#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);
	}
}

关于逆元,多说几句:

求法

(1)扩欧求(原理:转化为二元一次方程,要求gcd(a,m)=1)
代码见上
(2)费马小定理求(要求m为质数)

ll inv(ll a){
	return quickpow(a,mod-2);
}

(3)线性求

ll inv(ll a){
	return a==1?1:(long long)(mod-mod/a)*inv(mod%a)%mod;
}

(4)(批量求法)线性求

void Inverse(int m,int inv[],int n){//线性求<=n的数%m意义下的逆元 
	inv[1]=1;
	for(int i=2;i<=n;i++){
		inv[i]=1ll*(m-m/i)*inv[m%i]%m;
	}
}

逆元存在的条件

a x ≡ 1 ( m o d m ) ax\equiv 1\pmod{m} ax1(modm)有解,必须有 g c d ( a , m ) = 1 gcd(a,m)=1 gcd(a,m)=1
因为:这个解x同时也是 a × x + b × m = 1 a\times x+b\times m=1 a×x+b×m=1的一个整数解。
而若要 a × x + b × m = c a\times x+b\times m=c a×x+b×m=c有解,必须有 g c d ( a , m ) ∣ c gcd(a,m)|c gcd(a,m)c,而此时 c = 1 c=1 c=1,那么 g c d ( a , m ) gcd(a,m) gcd(a,m)只能为 1 1 1才有解。

性质

(1)不唯一
c ′ ≡ c ( m o d m ) c'\equiv c(mod m) cc(modm)也一定是a对模m的逆。
(2)完全积性函数
a − 1 × b − 1 = ( a b ) − 1 a^{-1}\times b^{-1}=(ab)^{-1} a1×b1=(ab)1
证明:证明
(3)可用于求除法取模
取模再乘以一个数的逆元取模=除以这个数最后整体取模

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值