拓展欧几里德求逆元模板(C++版)

逆元其实就相当于倒数的一个推广(我的理解),比如A/B 就相当于A乘B的逆元,也就是倒数,在模n情况下就不只是简单的倒数这种情况了
用拓展欧几里德来求逆元,具体证明还不太懂,就。。先背吧

hdu1576
题意是给A%MOD 和MOD 和B 求(A/B)%MOD ,那已知A%MOD 其实就可以相当于已知A,但是肯定不能直接除以B,所以相当于乘以B的逆元,所以问题就转化为求B的逆元

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll exgcd(ll a,ll b,ll &x,ll &y){
   
    if(!b){
   
        x=1;
        y=0;
        return a;
    }
    ll d=exgcd(b,a%b,x,y);
    ll tmp=x;
    x=y;
    y=tmp-a/b*y;
    return d;
}
ll inv(ll a,ll m){
   
    ll x,y;
    ll d=exgcd(a,m,x,y);
    if(d==1){
   
        //处理负数
        return (x%m+m)%m;
    }
    return -1;
}
ll n,b;
int t;
const ll MOD=9973;
int main(void){
   
    scanf("%d",&t);
    while(t--){
   
        scanf("%lld%lld",&n,&b);
        ll c=inv(b,MOD);
        printf("%lld\n",n*c%MOD);
    }
    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-15 17:46
暑期就挂了,秋招还有机会吗
大聪明777:研发提前批,14号刚开的,官网上面的配图上有写。提前批没过的话,秋招还可以投,不过前面的笔试/面试记录会被保留,供秋招参考
26届校招投递进展
点赞 评论 收藏
分享
水墨不写bug:疑似没有上过大学
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务