C语言经典算法100例-016-求最大公约数和最小公倍数
来源:互联网 发布:切片软件 编辑:程序博客网 时间:2024/06/05 09:31
题目如下:
输入两个正整数m 和n,求其最大公约数和最小公倍数。
1.分析:利用辗转相除法计算最大公约数,再求最小公倍数。下面是辗转相除法的理论:
辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。例如,252和105的最大公约数是21(252 = 21 × 12;105 = 21 × 5);因为252 / 105 = 2余42,所以105和42的最大公约数也是21。在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至余数变为零。这时的除数就是所求的两个数的最大公约数。
2.实现:首先我们来看一种非递归的方式:
#include <stdio.h>#include <stdlib.h>//求最大公约数和最小公倍数int main(){ int num1,num2,temp; int a,b; printf("Plese input two integers!\n"); scanf("%d%d",&num1,&num2); if(num1<num2) //使num1保存较大值 { temp=num1; num1=num2; num2=temp; } a=num1; b=num2; while(b!=0) //辗除法 直到b=0 { temp=a%b; a=b; b=temp; } printf("The max common divisor is %d\n",a); printf("The minum common multiple is %d\n",num1*num2/a); return 0;}其实,使用递归更直观更容易理解。
#include <stdio.h>#include <stdlib.h>//使用递归法求最大公约数unsigned gcd(unsigned,unsigned);int main(){ unsigned m,n; printf("Please input two integers!\n"); scanf("%u%u",&m,&n); printf("The gcd of %u and %u is %u.\n",m,n,gcd(m,n)); return 0;}unsigned gcd(unsigned m,unsigned n){ unsigned temp; //交换m,n使n保存较大值 if(m<n) { temp=m; m=n; n=temp; } //可以整除则返回除数,否则改变m,n继续求 if(m%n==0) return n; else return gcd(n,m%n);}
0 0
- C语言经典算法100例-016-求最大公约数和最小公倍数
- C语言求最大公约数和最小公倍数算法
- 常见算法:C语言求最小公倍数和最大公约数的算法
- C语言求最小公倍数和最大公约数三种算法
- C语言求最小公倍数和最大公约数三种算法
- C语言求最小公倍数和最大公约数三种算法
- C语言求最小公倍数和最大公约数三种算法
- C语言求最小公倍数和最大公约数三种算法
- C语言求最小公倍数和最大公约数三种算法
- C语言求最大公约数和最小公倍数的几种算法
- C语言-求最大公约数和最小公倍数
- C语言求最大公约数和最小公倍数
- 求最大公约数和最小公倍数-C语言
- c语言求最大公约数和最小公倍数
- c语言求最大公约数和最小公倍数
- C语言求最大公约数和最小公倍数
- C语言求最小公倍数和最大公约数
- C算法-求最大公约数和最小公倍数
- 什么是“以管理员身份运行”
- JVM方法内联
- POJ 2796 Feel Good (单调栈)
- Web service是什么?
- CEdit重绘垂直居中显示
- C语言经典算法100例-016-求最大公约数和最小公倍数
- Linux 第一课 学习的方向
- synchronized详解
- 计算几何三维模板
- 数据结构 -- 查找之 二分法查找
- 如何在ElementaryOS(Ubuntu 12.10)上搞定娇羞的Lumia920(Win8 phone)
- 树百业2014第十届广州国际汽车改装服务业展览会
- 《高效学习OpenGL》 之 裁剪测试 alpha测试 glScissor(),glAlphaFunc()
- Python笔记——基本数据结构:列表、元组及字典