c语言求最大公约数和最小公倍数(转)
最大公约数与最小公倍数的求解是很多初学C的人所面临的一道问题。当然这道问题并不难解答,也有很多人已经写过相关的博客,我在此书写此篇博客,一是为了让自己能够夯实基础,另外就是希望能够帮到和我一样的初学者。
当然,在写这篇博客之前,我已经做过相关资料的调查,可能读者会发现此篇博客会与其他人的博客有所重复,但是,我保证绝未抄袭。好了,进入正题!
问题:请从键盘上输入两个数值 x,y,请用C语言求出这两个数值的最大公约数与最小公倍数。
首先,我们要想解决这道问题,就要了解什么是最大公约数与最小公倍数。
最大公因数;也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。----来源百度百科
最小公倍数:两个或多个整数公有的倍数叫做它们的公倍数。----来源百度百科
了解了其含义,接下来就是构思算法,通常而言,求解最大公约数有三种算法,而最小公倍数的求解,我们可以很容易的推断出,最小公倍数等于两个数值的乘积除以这两个数值的最大公约数。那么接下来的算法我将在此一一进行列举和解释。
1.辗转相除法:
又名欧几里德算法(Euclidean algorithm),它是已知最古老的算法, 其可追溯至公元前300年前。 ----来源百度百科
辗转:望文生义,就是翻来覆去。相除就很好理解了,就是进行除法运算。
辗转相除法的核心就是不断的让两个数做除法运算。其原理基于两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。
假设两数为 x,y。
先令 z = x % y ;
之后 y 赋给 x 即令 x = y ;
再将 z 赋给 y 即令 y = z;
辗转相减,其终止条件为:y 等于0时。
代码如下:
- #include<stdio.h>
- int main()
- {
- int x, y, z, m, n;
- printf("请输入两个数:");
- scanf_s("%d%d", &x, &y);
- m = x, n = y;
- while (y != 0)
- {
- z = x%y;
- x = y;
- y = z;
- }
- printf("最大公约数是: %d\n", x);
- printf("最小公倍数是: %d\n", m*n / x);
- system("pause");
- return 0;
- }
2.辗转相减法:
即尼考曼彻斯法,其特色是做一系列减法,从而求得最大公约数。----来源百度百科
辗转相减法即通过对两数的不断减法运算。
假设两数为 x, y。
当 x > y 时,令 x = x - y;
反之,则令 y = y - x;
之后一直辗转相减,直至 x = y 时,终止。
代码如下:
- #include<stdio.h>
- int main()
- {
- int x, y, m, n;
- printf("请输入两个数:");
- scanf_s("%d%d", &x, &y);
- 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);
- system("pause");
- return 0;
- }
3.穷举法:
穷举法的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。----来源百度百科
穷举法又称枚举法,通过对数值范围内的所有数字进行检验,得出其结果。
代码如下:
- #include<stdio.h>
- int main()
- {
- int x, y, i, m, n;
- printf("请输入两个数:");
- scanf_s("%d%d", &x, &y);
- m = x, n = y;
- for (i = 1; i <= x; i++)
- {
- if (x%i == 0 && y%i == 0)
- }
- for (i = x; i > 0; i--)
- {
- if (x%i == 0 && y%i == 0)
- }
- printf("最大公约数是: %d\n", i);
- printf("最小公倍数是: %d\n", m*n / i);
- system("pause");
- return 0;
- }
以上即为求解最大公约数与最小公倍数的三种算法,如有纰漏,还请各位不吝赐教。
c语言求最大公约数和最小公倍数(转)的更多相关文章
- c语言求最大公约数和最小公倍数
求最大公约数和最小公倍数 假设有两个数a和b,求a,b的最大公约数和最小公倍数实际上是一个问题,得出这两个数的最大公约数就可以算出它们的最小公倍数. 最小公倍数的公式是 a*b/m m为最大公约数 因 ...
- JAVA 基础编程练习题6 【程序 6 求最大公约数及最小公倍数】
6 [程序 6 求最大公约数及最小公倍数] 题目:输入两个正整数 m 和 n,求其最大公约数和最小公倍数. 程序分析:利用辗除法. package cskaoyan; public class csk ...
- c语言:辗转相除法求最大公约数、最小公倍数
辗转相除法,又称欧几里得算法.两个正整数a和b(a>b),它们的最大公约数等于余数c和较小的数b之间的最大公约数.最小公倍数=两数之积/最大公约数 #include <stdio.h> ...
- Java求最大公约数和最小公倍数
最大公约数(Greatest Common Divisor(GCD)) 基本概念 最大公因数,也称最大公约数.最大公因子,指两个或多个整数共有约数中最大的一个.a,b的最大公约数记为(a,b),同样的 ...
- 辗转相除法求最大公约数和最小公倍数【gcd】
要求最小公倍数可先求出最大公约数 设要求两个数a,b的最大公约数 伪代码: int yushu,a,b: while(b不等于0) { yushu=a对b求余 b的值赋给a yushu的值赋给b } ...
- Java50道经典习题-程序6 求最大公约数及最小公倍数
题目:输入两个正整数m和n,求其最大公约数和最小公倍数.分析:用辗转相除法求最大公约数 两个数的最大公约数:设两个数分别为n和m,(n>=m);用定义一个变量i,使用for循环,将i的取值 ...
- Problem06 求最大公约数及最小公倍数
题目:输入两个正整数m和n,求其最大公约数(m,n)和最小公倍数[m,n]. 程序分析:利用辗转相除法. 利用辗除法:用较大数除以较小数,再用出现的余数(第一余数)去除除数, 再用出现的余数(第二余数 ...
- 求最大公约数和最小公倍数_python
"""写两个函数,分别求两个整数的最大公约数和最小公倍数,调用这两个函数,并输出结果.两个整数由键盘输入.""" ''' 设两个整数u和v, ...
- C语言 · 求最大公约数
算法提高 求最大公约数 时间限制:1.0s 内存限制:512.0MB 编写一函数gcd,求两个正整数的最大公约数. 样例输入: 5 15样例输出:5 样例输入: 7 2样例输出:1 ...
随机推荐
- Django之路由分配系统
前言: Django大致工作流程 1.客户端发送请求(get/post)经过web服务器.Django中间件. 到达路由分配系统 2.路由分配系统根据提取 request中携带的的url路径(path ...
- SourceInsight 4重启之后文件变只读无法编辑
SourceInsight4.0在导入代码后,用起来没问题,第二天,再开启sourceInsight,结果所有文件变成只读了,不能编辑,标签前面也有了叹号. 百度一下,有人说是版本控制的问题,但是sv ...
- Android Studio打包生成APK教程
一.修改版本和指定生成APK文件名[可选] 将项目切换到Project视图,打开app目录下的build.gradle文件 1.1 修定软件版本 如1.2图所示. versionCode是app的大版 ...
- 套接字编程,创建套接字socket
1.套接字地址结构: struct sockaddr { sa_family_t sa_family; char sa_data[14]; }; 其中,成员sa_family表示套接字的协议族类型,对 ...
- 最新jquery+easyui_api培训文档
目 录 1 Accordion(可折叠标签) 2 1.1 实例 2 1.2 参数 3 2 DateBox(日期框) 4 2.1 实例 4 2.2 参数 6 2.3 事件 6 2.4 方法 6 3 C ...
- cpu-z for ubuntu 12.04 64bit : cpu-g
wget https://launchpad.net/~phantomas/+archive/ppa/+files/cpu-g_0.9.0_amd64.deb sudo dpkg -i cpu-g*. ...
- firstchild.data与childNodes[0].nodeValue意思
x.firstchild.data:获取元素第一个子节点的数据: x.childNodes[0]::获取元素第一个子节点; x.childNodes[0].nodeValue.:也是获取元素第一个子节 ...
- xadmin自定义关联菜单
网上好多自定义xadmin后台数据很少有关怎样设置外键关联菜单的显示,如下图所示: 现有个需求根据model中status字段值,来显示关联菜单三道杠,如上图app状态只有是审核成功才会显示,未审核不 ...
- HTML5 ④
块元素和行元素: 1.行元素:在一行内显示,不会自动换行的标签.不能设置宽高. 块元素:自动换行的标签,能设置宽高.*利于我们页面布局 比如:段落标签,标题标签都是块元素 2.两者可以互相转换,通 ...
- 【收集资料】OpenGL学习
1.课本配套网站,有Sample Code和书中的图片等 http://math.ucsd.edu/~sbuss/MathCG/ 2.Visual C++的帮助系统可查阅基本OpenGL函数(不包 ...