C 语言求最大公约数和最小公倍数算法

C 语言求最大公约数和最小公倍数可以说是C 语言编程学习中一个重点和难点,它常常作为计算机专业学生参加各种考试必须要把握的内容。其算法方面除常用的辗转相除法外、还可以根据数学定义法、递归调用法等。下面结合我学习以来的笔记整理、总结几种常用的方法进行比较,以便能够更好的理解、应用、共勉。

前提:假设求任意两个整数的最大公约数和最小公倍数,采用函数调用形式进行。

1、辗转相除法

辗转相除法(又名欧几里德法)C 语言中用于计算两个正整数a,b 的最大公约数和最小公倍数,实质它依赖于下面的定理:

a b=0

gcd(a,b) =

gcd(b,a mod b) b!=0

根据这一定理可以采用函数嵌套调用和递归调用形式进行求两个数的最大公约数和最小公倍数, 现分别叙述如下:

①、函数嵌套调用

其算法过程为: 前提:设两数为a,b 设其中a 做被除数,b 做除数,temp 为余数

1、大数放a 中、小数放b 中;

2、求a/b的余数;

3、若temp=0则b 为最大公约数;

4、如果temp!=0则把b 的值给a 、temp 的值给a ;

5、返回第第二步;

代码:

int divisor (int a,int b) /*自定义函数求两数的最大公约数*/

{

int temp; /*定义整型变量*/

if(a

{ temp=a;a=b;b=temp;} /*设置中间变量进行两数交换*/

while(b!=0) /*通过循环求两数的余数,直到余数为0*/

{

temp=a%b;

a=b; /*变量数值交换*/

b=temp;

}

return (a); /*返回最大公约数到调用函数处*/

}

int multiple (int a,int b) /*自定义函数求两数的最小公倍数*/

{

int divisor (int a,int b); /*自定义函数返回值类型*/

int temp;

temp=divisor(a,b); /*再次调用自定义函数,求出最大公约数*/

return (a*b/temp); /*返回最小公倍数到主调函数处进行输出*/

}

#include "stdio.h" /*输入输出类头文件*/

main()

{

int m,n,t1,t2; /*定义整型变量*/

printf("please input two integer number:"); /*提示输入两个整数*/

scanf("%d%d",&m,&n); /*通过终端输入两个数*/

t1=divisor(m,n); /*自定义主调函数*/

t2=multiple(m,n); /*自定义主调函数*/

printf("The higest common divisor is %d\n",t1); /*输出最大公约数*/

printf("The lowest common multiple is %d\n", t2); /*输出最小公倍数*/

}

启示:请注意算法中变量数值之间的相互交换方法、如何取模、怎样进行自定义函数及主调函数与被调函数间的相互关系,函数参数的定义及对应关系特点,利用控制语句如何实现。

②、函数递归调用

int gcd (int a,int b)

{ if(a%b==0)

return b;

else

return gcd(b,a%b);

}

#include "stdio.h"

main()

{

int m,n,t1;

printf("please input two integer number:");

scanf("%d%d",&m,&n);

t1=gcd(m,n);

printf("The highest common divisor is %d\n",t1);/*最大公约数*/

printf("The least common multiple is %d\n",m*n/t1);/*最小公倍数*/

getch();

}

启示:采用递归调用法要注意递归终止条件的描述,只有找到递归变化的规律,才能有效地解决问题。

2、穷举法(利用数学定义)

穷举法(也叫枚举法)穷举法求两个正整数的最大公约数的解题步骤:从两个数中较小数开始由大到小列举,直到找到公约数立即中断列举,得到的公约数便是最大公约数 。

①、定义1:对两个正整数a,b 如果能在区间[a,0]或[b,0]内能找到一个整数temp 能同时被a 和b 所整除,则temp 即为最大公约数。

代码为:

int divisor (int a,int b) /*自定义函数求两数的最大公约数*/

{

int temp; /*定义义整型变量*/

temp=(a>b)?b:a; /*采种条件运算表达式求出两个数中的最小值*/

while(temp>0)

{

if (a%temp==0&&b%temp==0) /*只要找到一个数能同时被a,b 所整除,则中止循环*/ break;

temp--; /*如不满足if 条件则变量自减,直到能被a,b 所整除*/

}

return (temp); /*返回满足条件的数到主调函数处*/

}

#include "stdio.h"

main()

{

int m,n,t1;

printf("please input two integer number:");

scanf("%d%d",&m,&n);

t1=divisor(m,n);

printf("The higest common divisor is %d\n",t1);

getch();

}

②、定义2:对两个正整数a,b, 如果若干个a 之和或b 之和能被b 所整除或能被a 所整除,则该和数即为所求的最小公倍数。

代码为:

int multiple (int a,int b)

{

int p,q,temp;

p=(a>b)?a:b; /*求两个数中的最大值*/

q=(a>b)?b:a; /*求两个数中的最小值*/

temp=p; /*最大值赋给p 为变量自增作准备*/

while(1) /*利用循环语句来求满足条件的数值*/

{

if(p%q==0)

break; /*只要找到变量的和数能被a 或b 所整除,则中止循环*/

p+=temp; /*如果条件不满足则变量自身相加*/

}

return (p);

}

#include "stdio.h"

main()

{

int m,n,t2;

printf("please input two integer number:");

scanf("%d%d",&m,&n);

t2=multiple(m,n);

printf("The least common multiple is %d\n",t2);

getch();

}

启示:根据数学定义求任意两个正整数的最大公约数和最小公倍数,相对辗转相除法来说,易懂,容易被学习者接受,但也请读者注意强制退出循环过程的条件、变量的特点及控制语句的使用。

结束语

C 语言编程关键在于确定好算法及算法过程,同时要合理定义变量和函数及控制语句操作,只有这样才能保证编程的正确性、、可读性、实用性。

c语言有参有类最小公倍数,C语言求最大公约数和最小公倍数算法相关推荐

  1. C语言经典例题100道(辗转相除求最大公约数和最小公倍数)

    程序[16] 题目:输入两个正整数m和n,求其最大公约数和最小公倍数. 程序分析: (1)最小公倍数=输入的两个数之积除于它们的最大公约数,关键是求出最大公约数: (2)求最大公约数用辗转相除法(又名 ...

  2. python计算最大公约数和最小公倍数_python怎么求最大公约数和最小公倍数

    python怎么求最大公约数和最小公倍数 一.求最大公约数 用辗转相除法求最大公约数的算法如下: 两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数.比如10和 ...

  3. python最大公约数和最小公倍数_python怎么求最大公约数和最小公倍数

    python怎么求最大公约数和最小公倍数 一.求最大公约数 用辗转相除法求最大公约数的算法如下: 两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数.比如10和 ...

  4. php怎么求最小公倍数,PHP编程求最大公约数与最小公倍数的方法示例

    本文实例讲述了PHP编程求最大公约数与最小公倍数的方法.分享给大家供大家参考,具体如下: //求最大公约数 function max_divisor($a,$b) { $n = min($a, $b) ...

  5. python中最小公倍数函数_python求最大公约数和最小公倍数的简单方法

    python怎么求最大公约数和最小公倍数 一.求最大公约数 用辗转相除法求最大公约数的算法如下: 两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数.比如10和 ...

  6. python编程求最大公约数和最小公倍数_python怎么求最大公约数和最小公倍数

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  7. C语言求最大公约数与最小公倍数

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105022773 求 ...

  8. c语言编程最大公约数穷举发,C语言基本算法 :1.求最大公约数与最小公倍数

    C语言基本算法 :1.求最大公约数与最小公倍数 一.最大公约数: 最大公约数目前有三种求法:更相减损术.辗转相除法以及穷举法. 1.更相减损术: 算法介绍:设两个整数数a和b,以较大数减较小数,得出的 ...

  9. c语言如何判断最小公倍数,c语言如何求最大公约数和最小公倍数?

    推荐教程:<C视频教程> c语言如何求最大公约数和最小公倍数? c语言求最大公约数和最小公倍数的方法: 求最大公约数算法: 有两整数a和b: ① a%b得余数c ② 若c=0,则b即为两数 ...

最新文章

  1. Android中网络使用
  2. mysql 索引类型案例_Mysql索引类型与基本用法实例分析
  3. Docker:搭建RabbitMQ集群
  4. MySQL二进制日志文件过期天数设置说明
  5. [c# 20问] 4.Console应用获取执行路径
  6. 《C和C++程序员面试秘笈》——1.4 i++与++i哪个效率更高
  7. 【屏幕PrtSc键的使用,截取对话框和全屏截取】
  8. 走格子(bfs+dji)
  9. java中成员变量和局部变量的区别
  10. [Python]一个简单的QQ截图
  11. u盘不能格式化怎么办
  12. vue项目设置footer始终处于页面底部
  13. kubernetes访问控制——Authentication认证、Authorization授权、服务账户的自动化
  14. H264编码基本原理(一)
  15. 【淘宝】从开店到运营 - 开店前期知识(天猫、淘宝店铺介绍)
  16. shell-判断是不是文件夹
  17. 50W闭环控制Boost DC-DC变换器样机设计
  18. python识别图像中绿色的部分_[OpenCV-Python] OpenCV 中的图像处理 部分 IV (四)
  19. 【论文笔记】Are We Ready for Vision-Centric Driving Streaming Perception? The ASAP Benchmark
  20. h5页面在手机浏览器上不能上下移动的问题

热门文章

  1. POJ 1741 树分治
  2. hdu 3786 寻找直系亲属
  3. SQL Server 2005 命令行实用工具
  4. 在当当买了python怎么下载源代码-Python爬取当当、京东、亚马逊图书信息代码实例...
  5. 学习python是干嘛的-学 Python 都用来干嘛的?
  6. r语言和python-r语言和python
  7. python窗口程序-窗口程序python
  8. python的薪资待遇-Python的就业薪资具体多少?发展前景到底如何?
  9. python读取excel表格-python读写Excel表格的实例代码(简单实用)
  10. arcgis python规划地类-基于ArcGIS的Python——要素类至地理数据库