题目:
https://www.luogu.org/problem/show?pid=1082
exgcd裸题;
自己写的比较丑的代码;
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int x,y,a,b;
int exgcd(int a,int b,int &x,int &y)
{
int k,r;
if(!b)
{
x=1,y=0;
return a;
}
r=exgcd(b,a%b,x,y);
k=x,x=y,y=k-a/b*y;
return r;
}
bool pd()
{
int r=exgcd(a,b,x,y);
if(1%r) return false;
int k=1/r,cnt=1;
while(x<0)
{
x+=b/r*cnt;
y-=a/r*cnt;
}
return true;
}
void solve()
{
cin>>a>>b;
if(pd()) cout<<x<<endl;
}
int main()
{
solve();
return 0;
}
还可以:
#include<iostream>
using namespace std;
int a,b,x,y,k,aa,bb,cc;
void exgcd(int a,int b)
{
if(!b) {x=1,y=0;return;}
else exgcd(b,a%b);
k=y,y=x-(a/b)*k,x=k;
return;
}
int main()
{
cin>>aa>>bb;
exgcd(aa,bb);
cout<<(x+bb)%bb;
return 0;
}
原理一样,因为a与b互质,而1/1=1……