阅读《密码学与网络安全》这本书,看到线性丢番图方程,就结合之前看到的一些算法,写了一个得到解的程序,加深理解。
也就把代码贴在这里:
void exEuclidean(int a,int b,int &s,int &t){
int r1 = a, r2 = b , s1 = 1, s2 = 0, t1 = 0, t2 = 1;//初始化
int q,r;
while(r2 > 0)
{
q = r1 / r2;
r = r1 - q * r2; //也就是r = r1%r2;
r1 = r2;
r2 = r;
s = s1 - q * s2;
s1 = s2;
s2 = s;
t = t1 - q * t2;
t1 = t2;
t2 = t;
}
//gcd(a,b) = r1;
s = s1;
t = t1;
}
int gcd(int x,int y){
return y == 0 ? x : gcd(y,x%y);
}
int main()
{
int a,b,c;
printf("请依次输入ax + by = c中的参数a,b,c!\n");
scanf("%d %d %d",&a,&b,&c);
//首先求出gcd(a,b),利用朴素欧几里得算法
int gcd_a_b = gcd(a,b);
if(c % gcd_a_b != 0){
printf("c不能整出gcd(a,b),该方程无整数解!\n");
return 0;
}
else{ //会有无穷多个解