C语言求最小公倍数和最大公约数三种算法(经典)
时间:2022-05-07
本文章向大家介绍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即为最大公约数
1 #include<stdio.h>
2 int main() /* 辗转相除法求最大公约数 */
3 {
4 int m, n, a, b, t, c;
5 printf("Input two integer numbers:n");
6 scanf("%d%d", &a, &b);
7 m=a; n=b;
8 while(b!=0) /* 余数不为0,继续相除,直到余数为0 */
9 { c=a%b; a=b; b=c;}
10 printf("The largest common divisor:%dn", a);
11 printf("The least common multiple:%dn", m*n/a);
12 }
提供一种简写的方式:
1 int gcd(int a,int b)
2 {
3 return b==0?a:gcd(b,a%b);
4 }
⑵ 相减法
有两整数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即为最大公约数
1 #include<stdio.h>
2 int main ( ) /* 相减法求最大公约数 */
3 {
4 int m, n, a, b, c;
5 printf("Input two integer numbers:n");
6 scanf ("%d,%d", &a, &b);m=a; n=b;
7 /* a, b不相等,大数减小数,直到相等为止。*/
8 while ( a!=b)
9 if (a>b) a=a-b;
10 else b=b-a;
11 printf("The largest common divisor:%dn", a);
12 printf("The least common multiple:%dn", m*n/a);
13 }
⑶穷举法
有两整数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--,再回去执行②
1 #include<stdio.h>
2 int main () /* 穷举法求最大公约数 */
3 {
4 int m, n, a, b, i, t;
5 printf("Input two integer numbers:n");
6 scanf ("%d,%d", &a, &b);m=a; n=b;
7 for (i=1; i<= a; i++)
8 if ( a%i == 0 && b%i ==0 ) t=i;
9 printf("The largest common divisor:%dn", t);
10 printf("The least common multiple:%dn", m*n/t);
11 }
12 /* 改进后的
13 for (t= a; t>0; t-- )
14 if ( a%t == 0 && b%t ==0 ) break;
15 */
1 //穷举法求最小公倍数
2 for (i= a; ; i++ )
3 if ( i % a == 0 && i % b ==0 ) break;
4 printf("The least common multiple:%dn", i )
5
6 //多个数的最大公约数和最小公倍数
7 for (i= a; i>0; i-- )
8 if (a%i==0&&b%i==0&&c%i==0) break;
9 printf("The largest common divisor:%dn", i);
10 for (i= a; ; i++ )
11 if (i%a==0&&i%b==0&&i% c==0) break;
12 printf("The least common multiple:%dn", i )
- 在Entity Framework中使用存储过程(三):逻辑删除的实现与自增长列值返回
- 在Entity Framework中使用存储过程(四):如何为Delete存储过程参数赋上Current值?
- ASP.NET MVC是如何运行的(4): Action的执行
- ASP.NET MVC是如何运行的[1]: 建立在“伪”MVC框架上的Web应用
- 在Entity Framework中使用存储过程(五):如何通过存储过程维护多对多关系?
- ASP.NET MVC下基于异常处理的完整解决方案
- 不到40行代码构建正则表达式引擎
- 随便写一篇文章
- Java 10新特性解密
- Android组件化框架项目详解
- ScheduledThreadPoolExecutor原理探究
- TensorFlow下载与安装
- Kotlin基础之内联函数
- 不服来战,看Kotlin如何完爆Java
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 移动webhead参数
- 看了这篇泛型,下次设计链表别傻傻的用int 表示node节点的值了
- 标准TensorFlow格式 TFRecords
- LeetCode 05最长回文子串
- 基于NCNN的3x3可分离卷积再思考盒子滤波
- [译]Buidler 新手教程
- tf.train.shuffle_batch函数解析
- 网页小图标Favicon
- ASP.net Core MVC项目给js文件添加版本号
- 多目标优化非支配关系实现
- linux之shell
- linux下的定时任务处理
- 10 个用纯 Javascript 实现的好用插件
- Tensorflow ActiveFunction激活函数解析
- C++核心准则Con.1:默认情况下使对象不可修改