C语言求两个数中最大公约数
2015-09-30 23:25
387 查看
在C语言中如何求两个数的最大公约数呢?下面用三种方法进行求解。
方法一:穷举法。
先比较两个数的大小,然后找出较小数t,最后判断t为何值时两个数都能整除,此方法效率较低。
代码如下:
辗转相减法是用较大数减去较小数,再比较减数和差的大小,用较大数减去较小数,如此不断循环,直到两数相减为0停止,则最大公约数就求出来了。
代码如下:
辗转相除法求两个数的最大公约数的步骤如下:
先用小的一个数除大的一个数,得第一个余数;
再用第一个余数除小的一个数,得第二个余数;
又用第二个余数除第一个余数,得第三个余数;
这样逐次用后一个数去除前一个余数,直到余数是0为止.那么,最后一个除数就是所求的最大公约数(如果最后的除数是1,那么原来的两个数是互质数。)
代码如下:
方法一:穷举法。
先比较两个数的大小,然后找出较小数t,最后判断t为何值时两个数都能整除,此方法效率较低。
代码如下:
#include<stdio.h> int main() { int num1,num2,temp,i; scanf("%d%d",&num1,&num2); if(num1>num2) { temp=num1; num1=num2; num2=temp; }/*将较小值赋给num1*/ for(i=num1;i>0;i--) { if(num1%i==0&&num2%i==0)/*两个数都被i整除时即为最大公约数*/ printf("%d ",i); } return 0; }方法二:辗转相减法。
辗转相减法是用较大数减去较小数,再比较减数和差的大小,用较大数减去较小数,如此不断循环,直到两数相减为0停止,则最大公约数就求出来了。
代码如下:
#include<stdio.h> int main() { int a,b; scanf("%d%d",&a,&b); while(a!=b) { if(a>b)a=a-b;/*比较两数大小,大数减小数差并赋给a*/ else b=b-a; } printf("%d",b); return 0; }方法三:辗转相除法。
辗转相除法求两个数的最大公约数的步骤如下:
先用小的一个数除大的一个数,得第一个余数;
再用第一个余数除小的一个数,得第二个余数;
又用第二个余数除第一个余数,得第三个余数;
这样逐次用后一个数去除前一个余数,直到余数是0为止.那么,最后一个除数就是所求的最大公约数(如果最后的除数是1,那么原来的两个数是互质数。)
代码如下:
#include<stdio.h> int main() { int num1,num2,temp; scanf("%d%d",&num1,&num2); /*不需要判断两个数的大小,当num1<num2时,在经过一次运算后,两个数自动进行交换。*/ while(num2) { temp=num1%num2;/*辗转相除求最大公约数*/ num1=num2; num2=temp; } printf("%d",num1); return 0; }最小公倍数求法:要求的两个数相乘除以最大公约数就是两个数的最小公倍数。
相关文章推荐
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法
- C语言泛型编程实例教程
- C语言中使用lex统计文本文件字符数
- 在C语言中转换时间的基本方法介绍
- C语言进制转换代码分享