辗转相除法的算法步骤C语言,c语言中的辗转相除法
如果需要两个正整数1997和615的最大公约数,则使用欧几里德算法,具体如下:
1997/615=3(剩余152人)
65/152=4(剩余7)
12/7=21(剩余5)
7/5=1(剩余2)
5/2=2(剩余1)
2/1=2(剩余0)
到目前为止,最大公约数是1。
用除数和余数重复除法运算。余数为0时,取当前公式的除数为最大公约数,则1997和615的最大公约数为1。
程序实现:# includesdio.h
//通过逐相除法求两个整数值x和y的最大公约数
int gcd(无符号x,无符号y) {
if (x % y==0) {
Printf(%d/%d=%d(剩余%d)\n ,x,y,x/y,x % y);
返回y;
}
else if (y % x==0) {
Printf(%d/%d=%d(剩余%d)\n ,y,x,y/x,y % x);
返回x;
}
else if (x y) {
Printf(%d/%d=%d(剩余%d)\n ,x,y,x/y,x % y);
返回gcd(y,(x % y));
}
else if (x y) {
Printf(%d/%d=%d(剩余%d)\n ,y,x,y/x,y % x);
返回gcd(x,(y % x));
}
}
int main(void) {
无符号x;
无符号y;
Puts(请输入x的值:);
scanf(%d ,x);
Puts(请输入y的值:);
scanf(%d ,y);
printf( %d 和% d的最大公约数是:% d ,x,y,gcd(x,y));
返回0;
}运行结果:
减法:最大公约数是一个大数减少到两个数相等的时候。
#包含stdio.h
//用折腾减法求两个整数值X和Y的最大公约数
int gcd(无符号x,无符号y) {
if (x==y) {
返回x;
}
else if (x y) {
printf(%d - %d=%d \n ,x,y,x-y);
返回gcd(y,x-y);
}
else if (x y) {
printf(%d - %d=%d \n ,y,x,y-x);
返回gcd(x,y-x);
}
}
int main(void) {
无符号x;
无符号y;
Puts(请输入x的值:);
scanf(%d ,x);
Puts(请输入y的值:);
scanf(%d ,y);
printf( %d 和% d的最大公约数是:% d ,x,y,gcd(x,y));
返回0;
}运行结果:
转载请联系作者授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。