用C求解两个数的最大公约数和最小公倍数
2016-04-09 11:02
489 查看
求解两个数的最大公约数和最小公倍数
首先最小公倍数的求解是依赖于最大公约数的,因为
最小公约数 = 两个整数的乘积 / 最大公约数
最大公约数的求解
(1)使用辗转相除法:
假设两个整数x和y:
第一步,求得x和y的余,即c = x%y;
第二步,判断c是否为0, 若为0,则说明y是两个数的最大公约数;否则需要将y赋值给x,将c赋值给y,再次执行第一步,直到判断出最大公约数为止。
函数中while循环也可以改成如下:
(2)使用相减法:
假设两个整数x和y。
第一步,判断两个数是否相等,只要不相等,则
第二步,判断两个数中较大者,然后将两个数的差保存在较大者中,返回第一步,直到两个数相等,则说明当前的值为最大公约数。
(3)还有一种是穷举法:
用穷举发求最大公约数。
假设两个整数x和y。设置一个数,从1开始,只要x和y都能同时被这个数整除,则记录下来这个数,否则不记录,然后该数递增,直到当前这个数大于x和y的任意一个,则记录下来的数即为最大公约数。也让这个数从x和y中任意一个开始,只要x和y都能同时被这个数整除,则直接输出该数,否则该数递减,再判断。直至x和y同时被当前数整除。
用穷举法求解最小公倍数。
假设两个整除x和y。设置一个数从x和y任意一个开始,只要该数能同时被x和y整除,则该数为最小公倍数,否则该数递增,直到满足条件,即为x和y的最小公倍数。
首先最小公倍数的求解是依赖于最大公约数的,因为
最小公约数 = 两个整数的乘积 / 最大公约数
最大公约数的求解
(1)使用辗转相除法:
假设两个整数x和y:
第一步,求得x和y的余,即c = x%y;
第二步,判断c是否为0, 若为0,则说明y是两个数的最大公约数;否则需要将y赋值给x,将c赋值给y,再次执行第一步,直到判断出最大公约数为止。
void GCD_LCD(int x, int y) //求公约数和公倍数 { int m, n, c; m = x, n = y; while(y !=0) //辗转相除求最大公约数 { c = x%y; x = y; y = c; } printf("最大公约数 %d\n",x); printf("最小公倍数 %d\n",m*n/x); }
函数中while循环也可以改成如下:
while((c = x % y) !=0 ) { x = y; y = c; } printf("最大公约数 %d\n",y); printf("最小公倍数 %d\n",m*n/y);
(2)使用相减法:
假设两个整数x和y。
第一步,判断两个数是否相等,只要不相等,则
第二步,判断两个数中较大者,然后将两个数的差保存在较大者中,返回第一步,直到两个数相等,则说明当前的值为最大公约数。
void GCD_LCD(int x, int y) //相减法求解最大公约数 { int m, n; m = x; n = y; while(x != y) { if(x>y) x = x-y; //原先最大的数保存两个数的差 else y = y-x; } printf("最大公约数是:%d\n",x); printf("最小公倍数是:%d\n",m*n/x); }
(3)还有一种是穷举法:
用穷举发求最大公约数。
假设两个整数x和y。设置一个数,从1开始,只要x和y都能同时被这个数整除,则记录下来这个数,否则不记录,然后该数递增,直到当前这个数大于x和y的任意一个,则记录下来的数即为最大公约数。也让这个数从x和y中任意一个开始,只要x和y都能同时被这个数整除,则直接输出该数,否则该数递减,再判断。直至x和y同时被当前数整除。
用穷举法求解最小公倍数。
假设两个整除x和y。设置一个数从x和y任意一个开始,只要该数能同时被x和y整除,则该数为最小公倍数,否则该数递增,直到满足条件,即为x和y的最小公倍数。
相关文章推荐
- 常规功能和模块自定义系统 (cfcmms)—040模块记录(数据)的权限设计(5)聚合操作
- Win10红石预览版升级后不能上网怎么办?Win10红石预览版升级不能上网的解决方法
- 蓝桥杯-基础练习-十进制转十六进制
- pcl通过积分图来进行法线预测
- 字符串匹配
- Android中gravity、layout_gravity、padding、margin的区别小结
- 06-图1 列出连通集
- 四则运算表达式网页版
- c++中栈与队列的实现
- Stopwatch工具类
- 常用命令与配置【备忘】
- http响应Last-Modified和ETag 2
- SGI 内存池
- javase JDK 和 javaee SDK
- SpringMVC的各种参数绑定方式
- Android Parcelable的使用
- Clion Windows Install
- Android 5种数据存储方式
- linux命令(二) blockdev命令
- 消除类游戏