C语言求最小公倍数和最大公约数三种算法
最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接
求最小公倍数算法:
最小公倍数=两整数的乘积÷最大公约数
求最大公约数算法:
(1)辗转相除法
有两整数a和b:
① a%b得余数c
② 若c=0,则b即为两数的最大公约数
③ 若c≠0,则a=b,b=c,再回去执行①
例如求27和15的最大公约数过程为:
27÷15 余1215÷12余312÷3余0因此,3即为最大公约数
- #include<stdio.h>
- void main() /* 辗转相除法求最大公约数 */
- {
- int m, n, a, b, t, c;
- printf("Input two integer numbers:\n");
- scanf("%d%d", &a, &b);
- m=a; n=b;
- while(b!=0) /* 余数不为0,继续相除,直到余数为0 */
- { c=a%b; a=b; b=c;}
- printf("The largest common divisor:%d\n", a);
- printf("The least common multiple:%d\n", m*n/a);
- }

#include<stdio.h>
void main() /* 辗转相除法求最大公约数 */
{
int m, n, a, b, t, c;
printf("Input two integer numbers:\n");
scanf("%d%d", &a, &b);
m=a; n=b;
while(b!=0) /* 余数不为0,继续相除,直到余数为0 */
{ c=a%b; a=b; b=c;}
printf("The largest common divisor:%d\n", a);
printf("The least common multiple:%d\n", m*n/a);
}
⑵ 相减法
有两整数a和b:
① 若a>b,则a=a-b
② 若a<b,则b=b-a
③ 若a=b,则a(或b)即为两数的最大公约数
④ 若a≠b,则再回去执行①
例如求27和15的最大公约数过程为:
27-15=12( 15>12 ) 15-12=3( 12>3 )
12-3=9( 9>3 ) 9-3=6( 6>3 )
6-3=3( 3==3 )
因此,3即为最大公约数
- #include<stdio.h>
- void main ( ) /* 相减法求最大公约数 */
- {
- int m, n, a, b, c;
- printf("Input two integer numbers:\n");
- scanf ("%d,%d", &a, &b);m=a; n=b;
- /* a, b不相等,大数减小数,直到相等为止。*/
- while ( a!=b)
- if (a>b) a=a-b;
- else b=b-a;
- printf("The largest common divisor:%d\n", a);
- printf("The least common multiple:%d\n", m*n/a);
- }

#include<stdio.h>
void main ( ) /* 相减法求最大公约数 */
{
int m, n, a, b, c;
printf("Input two integer numbers:\n");
scanf ("%d,%d", &a, &b);m=a; n=b;
/* a, b不相等,大数减小数,直到相等为止。*/
while ( a!=b)
if (a>b) a=a-b;
else b=b-a;
printf("The largest common divisor:%d\n", a);
printf("The least common multiple:%d\n", m*n/a);
}
⑶穷举法
有两整数a和b:
① i=1
② 若a,b能同时被i整除,则t=i
③ i++
④ 若 i <= a(或b),则再回去执行②
⑤ 若 i > a(或b),则t即为最大公约数,结束
改进:
① i= a(或b)
② 若a,b能同时被i整除,则i即为最大公约数,
结束
③ i--,再回去执行②
有两整数a和b:
① i=1
② 若a,b能同时被i整除,则t=i
③ i++
④ 若 i <= a(或b),则再回去执行②
⑤ 若 i > a(或b),则t即为最大公约数,结束
改进:
① i= a(或b)
② 若a,b能同时被i整除,则i即为最大公约数,
结束
③ i--,再回去执行②
- #include<stdio.h>
- void main () /* 穷举法求最大公约数 */
- {
- int m, n, a, b, i, t;
- printf("Input two integer numbers:\n");
- scanf ("%d,%d", &a, &b);m=a; n=b;
- for (i=1; i<= a; i++)
- if ( a%i == 0 && b%i ==0 ) t=i;
- printf("The largest common divisor:%d\n", t);
- printf("The least common multiple:%d\n", m*n/t);
- }
- /* 改进后的
- for (t= a; t>0; t-- )
- if ( a%t == 0 && b%t ==0 ) break;
- */

#include<stdio.h>
void main () /* 穷举法求最大公约数 */
{
int m, n, a, b, i, t;
printf("Input two integer numbers:\n");
scanf ("%d,%d", &a, &b);m=a; n=b;
for (i=1; i<= a; i++)
if ( a%i == 0 && b%i ==0 ) t=i;
printf("The largest common divisor:%d\n", t);
printf("The least common multiple:%d\n", m*n/t);
}
/* 改进后的
for (t= a; t>0; t-- )
if ( a%t == 0 && b%t ==0 ) break;
*/
- //穷举法求最小公倍数
- for (i= a; ; i++ )
- if ( i % a == 0 && i % b ==0 ) break;
- printf("The least common multiple:%d\n", i )
- //多个数的最大公约数和最小公倍数
- for (i= a; i>0; i-- )
- if (a%i==0&&b%i==0&&c%i==0) break;
- printf("The largest common divisor:%d\n", i);
- for (i= a; ; i++ )
- if (i%a==0&&i%b==0&&i% c==0) break;
- printf("The least common multiple:%d\n", i )
转自:http://blog.csdn.net/iwm_next/article/details/7450424
C语言求最小公倍数和最大公约数三种算法的更多相关文章
- 常见算法:C语言求最小公倍数和最大公约数三种算法
最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,当中一个最小的公倍数是他们的最小公倍数,相同地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接 求 ...
- C语言求最小公倍数和最大公约数三种算法(经典)
把以前写的一些经验总结汇个总,方便给未来的学弟学妹们做个参考! --------------------------永远爱你们的:Sakura 最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们 ...
- c语言求回文数的三种算法的描述
c语言求回文数的三种算法的描述 题目描述 注意:(这些回文数都没有前导0) 1位的回文数有0,1,2,3,4,5,6,7,8,9 共10个: 2位的回文数有11,22,33,44,55,66,77,8 ...
- 山东理工大学ACM平台题答案关于C语言 1181 C语言实验——最小公倍数和最大公约数
C语言实验——最小公倍数和最大公约数 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 从键盘输入两个正整数,求这两个正整数的最小公 ...
- 最短路问题的三种算法&模板
最短路算法&模板 最短路问题是图论的基础问题.本篇随笔就图论中最短路问题进行剖析,讲解常用的三种最短路算法:Floyd算法.Dijkstra算法及SPFA算法,并给出三种算法的模板.流畅阅读本 ...
- Java利用DES/3DES/AES这三种算法分别实现对称加密
转载地址:http://blog.csdn.net/smartbetter/article/details/54017759 有两句话是这么说的: 1)算法和数据结构就是编程的一个重要部分,你若失掉了 ...
- c语言实现两数交换的三种方法
实现变量的值互相交换的三种不同方法 方法一:利用第三个变量来实现数值的交换 int tmp; tmp = a; a = b; b = tmp; 此方法直观,简易.不易出错,推荐使用 方法二:利用两个变 ...
- 内存分配---FF、BF、WF三种算法
动态分区分配是根据进程的实际需要,动态的为之分配内存空间.而在实现可变分区分配时,将涉及到分区分配中 所用的数据结构.分区分配算法和分区的分配与内存回收的过程. 分区分配中的数据结构:(1)描述空闲块 ...
- 图文实例解析,InnoDB 存储引擎中行锁的三种算法
前文提到,对于 InnoDB 来说,随时都可以加锁(关于加锁的 SQL 语句这里就不说了,忘记的小伙伴可以翻一下上篇文章),但是并非随时都可以解锁.具体来说,InnoDB 采用的是两阶段锁定协议(tw ...
随机推荐
- Palindrome Function
Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 256000/256000 K (Java/Others)Total Submissio ...
- outlook撤回已发送邮件
官方教程参考: https://support.office.com/zh-cn/article/%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6%E5%90%8E%E6%92 ...
- 常用的JS代码块收集
/**数组去重一*/ (function (arr) { arr = arr.sort(); for (var i = 0; arr[i]; i++) { if (arr[i] === arr[i + ...
- Linux中的环境变量配置文件及其作用
登录相关的配置文件: /etc/profile 范围:对所有用户生效 作用: a.定义USER变量 b.定义LOGNAME变量 c.定义MAIL变量 d.定义PATH变量 e.定义HOSTNAME变量 ...
- Windows 上将Tomcat 8 安装为系统服务
第一部分 应用场景 需要服务器上Tomcat不显示启动窗口 需要服务器上Tomcat开机自启动 ... 第二部分 配置过程 一.修改配置文件 1 {Tomcat_HOME}/bin/service.b ...
- Dockerfile学习(二)
这节学习制作一个ssh镜像服务. 创建sshtest目录,进入到该目录中. 假如允许主机B上的root用户可以通过SSH登录到容器内部,那么首先要在B主机上通过ssh-keygen -t rsa命令生 ...
- 剑指offer 面试3题
面试3题: 题:数组中重复的数字 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复 ...
- LeetCode:旋转图像【48】
LeetCode:旋转图像[48] 题目描述 给定一个 n × n 的二维矩阵表示一个图像. 将图像顺时针旋转 90 度. 说明: 你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵.请不要使 ...
- iOS 视频全屏功能 学习
项目中,也写过类似"视频全屏"的功能, 前一阵子读到今日头条 的一篇技术文章,详细介绍三种旋转方法差异优劣最终择取.文章从技术角度看写的非常好,从用户角度看,也用过多家有视频功能的 ...
- MFC输出调试信息
刚学mfc时只知道用MessageBox输出,可是MessageBox只能输出字符串, 对于习惯于printf的我来说非常不便,后来查了一下mfc可以像printf一样输出, 就是TRACE这个宏,用 ...