C语言实现: 求两个数的最大公约数
2018-03-25 22:28
323 查看
求两数最大公约数的方法有很多,这里重点介绍这两种算法:辗转相除法 和 更相减损法。
int main()
{
int a = 6, b = 16,t;
if (a < b)
{
t = a;
a = b;
b = t;
}
flag:
if (a%b == 0)
{
printf("%d\n", b);
}
else
{
t = a;
a = b;
b = t%b;
goto flag;
}
system("pause");
return 0;
}PS:如果用循环来做的时候,我们需要将flag~goto语句中间的部分作为循环体。
两种方法相比,辗转相除法的代码效率更高,所以更推荐使用辗转相除法。
最后附上程序运行的结果:输入6和16
1、辗转相除法。
在两个数中,找出大数,用大数除以小数,得到整数商和余数,然后再不断地用除数(原来的小数)除以余数,直到没有余数为止。那么除数即为最大公约数。所以我们可以用一个循环来进行被除数、除数和余数之间的位置互换。也可以用goto语句来进行循环操作。要注意的是,goto语句在一个程序当中最好不要多次出现,否则程序很有可能混乱。这里给出一个利用goto语句完成的程序代码:#include<stdio.h>int main()
{
int a = 6, b = 16,t;
if (a < b)
{
t = a;
a = b;
b = t;
}
flag:
if (a%b == 0)
{
printf("%d\n", b);
}
else
{
t = a;
a = b;
b = t%b;
goto flag;
}
system("pause");
return 0;
}PS:如果用循环来做的时候,我们需要将flag~goto语句中间的部分作为循环体。
2、更相减损法。
这个算法原出自于《九章算术》中,将算法内容用现代汉语翻译后为:第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。则第一步中约掉的若干个2与第二步中等数的乘积就是所求的最大公约数。代码如下:#include<stdio.h> #include<math.h> int main() { int i = 0, t, x, a = 6, b = 16, result; while ((a % 2 == 0) && (b % 2 == 0)) { a /= 2; b /= 2; i += 1; } if (a < b) { t = a; a = b; b = t; } do { x = a - b; if (b == x) break; a = (b > x) ? b : x; b = (b < x) ? b : x; } while (x); if (i == 0) { result = b; printf("%d\n", result); } else { result = (int)pow(2, i)*b; printf("%d\n", result); } system("pause"); return 0; }
两种方法相比,辗转相除法的代码效率更高,所以更推荐使用辗转相除法。
最后附上程序运行的结果:输入6和16
相关文章推荐
- 用c语言实现 计算两个数的最大公约数
- Python自定义函数实现求两个数最大公约数、最小公倍数示例
- Java实现-一行代码求两个数的最大公约数
- 最大公约数,最小公倍数(C语言实现)
- 求输入两个数的最大公约数——C语言(求完善)
- 【C语言】求两个数的最大公约数
- java实现求两个数的最大公约数
- 求两个数的最大公约数 C语言
- 最大公约数 最小公倍数 C语言实现
- C语言求最小公倍数与最大公约数(4种实现)
- 三种方法实现求两个数的最大公约数
- C语言求两个数的最大公约数的三种算法
- [c语言] 调用函数实现求两个数中的最大值
- C语言进阶之路------函数调用之辗转相除法求两个数的最小公倍数和最大公约数
- C语言实现 编写一个函数,传入a,b两个int类型的变量,返回两个值的最大公约数。
- [置顶] 【C语言】求两个数的最大公约数
- C语言实现求最大公约数
- C语言 求两个数的最大公约数 (算法)--辗转相减法、辗转相除法
- C语言实现2个数的最大公约数
- C语言 求两个数的最大公约数