码迷,mamicode.com
首页 > 其他好文 > 详细

同余方程(扩欧模板)

时间:2019-03-09 14:16:17      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:while   har   ++   最小   扩展欧几里得   lin   https   exgcd   c++   

洛咕

题意:求关于x的同余方程\(ax\equiv1\pmod{b}\)的最小正整数解.

方程\(ax\equiv1\pmod{b}\)有解当且仅当\(gcd(a,b)=1\).所以方程可写为\(a*x+b*y=1\),用扩展欧几里得算法求出一组特解\(x_0,y_0\),通解是所有模b与\(x_0\)同余的整数,题目要求最小的解,故答案就是\((x_0+b)\mod b\).

#include<bits/stdc++.h>
#define LL long long
using namespace std;
inline LL read(){
   LL s=0,w=1;char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
   while(ch>='0'&&ch<='9'){s=s*10+ch-'0';ch=getchar();}
   return s*w;
}
LL exgcd(int a,int b,LL &x,LL &y){
    if(b==0){x=1;y=0;return a;}
    int d=exgcd(b,a%b,y,x);
    y-=x*(a/b);
    return d;
}
int main(){
    LL a=read(),b=read(),x,y;
    exgcd(a,b,x,y);
    printf("%lld\n",(x+b)%b);
    return 0;
}

同余方程(扩欧模板)

标签:while   har   ++   最小   扩展欧几里得   lin   https   exgcd   c++   

原文地址:https://www.cnblogs.com/PPXppx/p/10500552.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!