初学欧几里得,帮助理解。。
这里的x要为最小正整数,求出x然后又等式得到y。
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long LL;
void gcd(LL a,LL b,LL &d,LL &x,LL &y)
{
if(!b) {d=a,y=0,x=1;}
else
{
gcd(b,a%b,d,y,x);
y-=x*(a/b);
}
}
int main()
{
// freopen("E:\\ACM\\test.txt","r",stdin);
LL a,b,d,x,y,c=1;
while(cin>>a>>b)
{
gcd(a,b,d,x,y);
if(c%d) puts("sorry"); //c不是d的倍数则没有整数解
else
{
x*=c/d; //得到特解
b/=d;
x=(x%b+b)%b; //求最小正整数解x
y=(1-a*x)/b; //由等式推出y
cout<<x<<" "<<y<<endl;
}
}
return 0;
}
本文介绍了一个基于欧几里得算法的应用程序,用于解决特定类型的数学问题。该程序能够找到最小正整数解,并通过输入的参数计算出相应的解。通过递归的方式实现了最大公约数的计算,并进一步求解了线性方程的特解。
784

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



