2 条题解

  • 0
    @ 2025-10-10 13:36:04

    考虑扩展欧几里得定理求逆元。

    可得 bax1b\vert ax-1,因为 axmodb=1ax\mod b=1

    所以我们将 ax1(modb)ax\equiv1(\mod b) 转化为 axbk=1ax-bk=1

    直接套板子,但是注意到 xx 可能是负数所以需累加转为正整数。

    #include<bits/stdc++.h>
    using namespace std;
    
    int a,b,x,y;
    //拓展欧几里得
    int exgcd(int a,int b,int &x,int &y){
    	if(!b){
    		x=1,y=0;
    		return a;
    	}
    	int res=exgcd(b,a%b,x,y);
    	int temp=x; 
    	x=y;
    	y=temp-a/b*y;
    	return res; 
    } 
    int main(){
    	cin>>a>>b;
    	exgcd(a,b,x,y);
    	cout<<(x+b)%b;
    	return 0;
    }
    

    信息

    ID
    5140
    时间
    1000ms
    内存
    125MiB
    难度
    6
    标签
    递交数
    25
    已通过
    19
    上传者