1、Euclid算法:求两数最大公因数 gcd(a,b)
int gcd(int a,int b)
{
if(b==0) return a;
else return gcd(b,a%b);
}
2、拓展欧几里得算法
gcd(a,b) 为x*a+y*b能构成的最小正整数,设c=gcd(a,b),我们一定能找到满足条件
的(x,y)使得c=x*a+y*b .
特别是当a,b互素时,gcd(a,b)=1, 此时 有(x,y)满足 a*x+b*y=1 .
#include<stdio.h>
#define ll long long
void gcd(ll a,ll b,ll& d,ll& x,ll& y)
{
if(!b){d=a;x=1;y=0;}
else {gcd(b,a%b,d,y,x);y-=x*(a/b);}
}
int main()
{
ll a,b,d,x,y;
while(scanf("%lld%lld",&a,&b)!=EOF)
{
gcd(a,b,d,x,y);
printf("%lld*%lld+%lld*%lld=%lld\n",a,x,b,y,d);
}
return 0;
}
大佬文献:https://blog.youkuaiyun.com/leader_one/article/details/75222771