用于求解ax+by=gcd(a,b),有一系列其他应用。
时间复杂度:O(log2n)
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long LL;
LL a,b,ans1,ans2,_gcd;
void exgcd(LL a,LL b,LL &x,LL &y){
if(!b){ x=1; y=0; return; }
gcd(b,a%b,y,x); y-=x*(a/b); // x <= y' y <= x'-(a/b)y'
}
int main(){
freopen("gcd.in","r",stdin);
freopen("gcd.out","w",stdout);
scanf("%lld%lld",&a,&b);
exgcd(a,b,ans1,ans2);
printf("%lld %lld\n",ans1,ans2);
return 0;
}

本文介绍了一种高效的算法——扩展欧几里得算法,该算法主要用于解决形如 ax + by = gcd(a, b) 的线性方程,并提供了一个 C++ 实现示例。扩展欧几里得算法的时间复杂度为 O(log n),在计算最大公约数的同时找到特解。
1243

被折叠的 条评论
为什么被折叠?



