C语言求最小公倍数
- 格式:docx
- 大小:16.23 KB
- 文档页数:3
c编写两个函数,分别求最大公约数和最小公倍数最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。
求两个正整数m和n的最大公约数可用欧几里德算法(辗转相除法)。
main(){int p,r,n,m,temp;printf("please enter 2 numbers n,m:");scanf("%d,%d",&n,&m);//输出两个正整数.if(n\ucm)//把大数放在n中,把小数放在m中.{temp=n;n=m;m=temp;}p=n*m;//p就是原来两个数n,m的乘积.while(m!=0)//求两个数n,m的最大公约数.{r=n%m;n=m;m=r;}printf("its maxgongyueshu:%d\\n",n);//打印最大公约数.printf("its mingongbeishu:%d\\n",p/n);列印最轻公倍数.原理用欧几里德算法(只身二者乘法)谋两个数的最大公约数的步骤如下:先用小的一个数除大的一个数,得第一个余数;再用第一个余数除大的一个数,得第二个余数;又用第二个余数除第一个余数,得第三个余数;这样逐次用后一个数除去前一个余数,直至余数就是0年才。
那么,最后一个除数就是所求的最大公约数(如果最后的除数就是1,那么原来的两个数就是互质数)。
由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积。
这就是说,求两个数的最小公倍数,可以先求出两个数的最大公约数,再用这两个数的最大公约数去除这两个数的积,所得的商就是两个数的最小公倍数。
c语言最大公约数和最小公倍数的求法以C语言最大公约数和最小公倍数的求法为标题,本文将介绍如何使用C语言来计算两个数的最大公约数和最小公倍数。
最大公约数(Greatest Common Divisor,简称GCD)是指两个或多个整数共有的约数中最大的一个。
最小公倍数(Least Common Multiple,简称LCM)是指两个或多个整数公有的倍数中最小的一个。
我们来讨论如何计算两个数的最大公约数。
常见的求解最大公约数的方法有辗转相除法、欧几里得算法和更相减损法。
其中,辗转相除法是最常用且最简单的方法。
辗转相除法的思想是用较大的数除以较小的数,然后用得到的余数再去除以较小的数,直到余数为0为止。
最后一次的除数即为最大公约数。
下面是使用C语言编写的辗转相除法求最大公约数的代码:```#include <stdio.h>int gcd(int a, int b) {if (b == 0) {return a;} else {return gcd(b, a % b);}}int main() {int num1, num2;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);printf("最大公约数为:%d\n", gcd(num1, num2));return 0;}```代码中的`gcd`函数用于计算最大公约数,通过递归调用实现了辗转相除法。
`main`函数用于获取用户输入的两个整数,并调用`gcd`函数来计算最大公约数。
接下来,我们来讨论如何计算两个数的最小公倍数。
常见的求解最小公倍数的方法有通过最大公约数求解和直接计算两个数的乘积再除以最大公约数。
我们先介绍通过最大公约数求解最小公倍数的方法。
最小公倍数可以通过两个数之积除以最大公约数得到。
因此,我们只需要在上述的代码基础上进行一些修改即可:```#include <stdio.h>int gcd(int a, int b) {if (b == 0) {return a;} else {return gcd(b, a % b);}}int lcm(int a, int b) {int gcd_num = gcd(a, b);return (a * b) / gcd_num;}int main() {int num1, num2;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);printf("最大公约数为:%d\n", gcd(num1, num2)); printf("最小公倍数为:%d\n", lcm(num1, num2));return 0;}```在上述代码中,我们新增了一个`lcm`函数用于计算最小公倍数,该函数先调用`gcd`函数获得最大公约数,然后通过两个数之积除以最大公约数来计算最小公倍数。
C语言是一种广泛使用的编程语言,它有许多强大的特性,可以用来解决各种问题。
其中,求最大公约数和最小公倍数是一个常见的数学问题,而C语言中的辗转相除法和for语句可以很好地解决这个问题。
辗转相除法,又称欧几里德算法,是一种用于求解两个整数的最大公约数的方法。
我们用被除数除以除数,得到商和余数;将除数作为新的被除数,余数作为新的除数,重复这个过程,直到余数为0,这时除数就是最大公约数。
在C语言中,我们可以通过使用while循环来实现辗转相除法。
而for语句是C语言中的一种循环结构,用于重复执行一段代码若干次。
结合辗转相除法和for语句,我们可以很方便地求解最大公约数和最小公倍数。
接下来,我们将详细介绍如何在C语言中使用辗转相除法和for语句来求解最大公约数和最小公倍数。
1. 辗转相除法求最大公约数在C语言中,我们可以使用辗转相除法来求解两个整数的最大公约数。
下面是一个示例代码:```c#include <stdio.h>int gcd(int a, int b) {while (b != 0) {int temp = a b;a = b;b = temp;}return a;}int m本人n() {int x, y;printf("请输入两个整数:");scanf("d d", x, y);int result = gcd(x, y);printf("最大公约数是:d\n", result);return 0;}```在这段代码中,我们首先定义了一个名为gcd的函数,它接受两个整数参数a和b,返回它们的最大公约数。
在函数体内,我们使用while循环来不断执行辗转相除法的步骤,直到b为0,此时a就是最大公约数。
在m本人n函数中,我们首先从用户输入中获取两个整数,然后调用gcd函数求解它们的最大公约数,并输出结果。
2. 辗转相除法求最小公倍数除了最大公约数,辗转相除法也可以求解两个整数的最小公倍数。
C语⾔实现求解最⼩公倍数的算法⽰例⽬录题⽬描述问题分析⽅法⼀:穷举法⽅法⼆:定理法题⽬描述求任意两个正整数的最⼩公倍数问题分析两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最⼩的⼀个公倍数就叫做这⼏个整数的最⼩公倍数。
整数a,b的最⼩公倍数记为[a,b],同样的,a,b,c的最⼩公倍数记为[a,b,c],多个整数的最⼩公倍数也有同样的记号。
.与最⼩公倍数相对应的概念是最⼤公约数,a,b的最⼤公约数记为(a,b)。
关于最⼩公倍数与最⼤公约数,我们有这样的定理:(a,b)x[a,b]=ab(a,b均为整数)。
——百度百科我们可以通过两个⽅法求最⼩公倍数。
第⼀种是穷举法,列举所以可能的数,直到找到最⼩的公倍数;第⼆种是使⽤最⼩公倍数与最⼤公约数的⼀个定理——两个整数的最⼩公倍数等于两数之积除以两个数的最⼤公因数,即(a,b)x[a,b]=ab((a,b)表⽰a和b的最⼤公约数,[a,b]表⽰a和b的最⼩公倍数,a,b均为整数)⽅法⼀:穷举法假设有两个整数num1和num2,这两个整数的最⼩公倍数⼀定⼤于等于它们的最⼤值,同时⼩于等于它们的积。
按从⼩到⼤的顺序遍历整个范围内的所有整数,第⼀个公因数即为它们的最⼩公倍数。
【不考虑负数,求负数的最⼩公倍数本就是⽆意义的(相当于求两个正数的最⼤公倍数)】#include <stdio.h>/*** @brief 获取最⼩公倍数(穷举法)* @param num1 第⼀个正整数* @param num2 第⼀个正整数* @return 返回最⼩公倍数*/int Get_Min_Comm_Multiple(int num1, int num2){int i = 0, tmp = 0, mul = 0;tmp = num1 > num2 ? num1 : num2; //获取最⼤值mul = num1 * num2; //两数之积for(i = tmp; i <= mul; i++){//同时为num1和num2的倍数if(i % num1 == 0 && i % num2 == 0)break;}return i;}int main(){int num1, num2;printf("请输⼊两个正整数\n");scanf("%d%d", &num1, &num2);printf("它们的最⼩公倍数为:%d\n",Get_Min_Comm_Multiple(num1, num2));return 0;}运⾏结果⽅法⼆:定理法使⽤定理求最⼩公倍数(两个整数的最⼩公倍数等于两数之积除以两个数的最⼤公因数),需要先求出两个整数的最⼤公因数,最⼤公因数这⾥采⽤辗转相除法。
求最大公因数和最小公倍数的方法c 语言
最大公因数和最小公倍数是一个重要的数学概念,用于求解两个或多个整数的最大公因数和最小公倍数。
c语言提供了许多常用的方法来计算它们。
其中一种方法是辗转相除法。
辗转相除法是一种用于求解最大公因数的迭代算法,它可以利用两个数字的余数来计算最大公因数。
c语言的实现:给定两个整数a和b,我们可以先将它们大小比较,将较大的整数与较小的整数相除,得到余数r1;然后将较小的数和余数r1相除,得到新的余数r2;依次重复上述步骤,直到余数是0为止,这时最大公因数就是较小的那个被整除的数。
随后可以得到最小公倍数,它是两个整数的乘积除以它们的最大公因数。
在c 语言中,我们可以定义一个变量存储最大公因数,定义一个变量存储两个整数的乘积,然后利用这两个变量来求解最小公倍数。
通过上述介绍,可以知道如何使用辗转相除法运用c程序求最大公因数和最小公倍数的步骤。
掌握此算法的能力可以帮助我们在日常生活中更好地处理各种复杂的问题,从而扩展我们的数学思维和计算能力。
题目:C语言中最大公约数和最小公倍数的计算公式一、最大公约数的计算公式在C语言中,可以使用辗转相除法来计算两个数的最大公约数。
辗转相除法又称欧几里德算法,通过不断取两个数的余数来逐步缩小问题规模,直到余数为0时,较小的那个数就是最大公约数。
具体公式如下:1. 设两个数为a和b,且a>b。
2. 不断用较小数对较大数取模,然后把较大数作为下一轮的被除数,较小数作为除数,直到余数为0。
3. 最后的非零余数即为最大公约数。
C语言代码示例如下:```cint gcd(int a, int b) {int temp;while (b != 0) {temp = a b;a = b;b = temp;}return a;}```二、最小公倍数的计算公式计算两个数的最小公倍数可以利用它们的最大公约数来求得,公式如下:1. 两个数a和b的最小公倍数等于这两个数的乘积除以它们的最大公约数。
C语言代码示例如下:```cint lcm(int a, int b) {return (a * b) / gcd(a, b);}```总结通过以上介绍,我们了解了C语言中计算最大公约数和最小公倍数的公式及相应的代码实现。
这些公式和代码在实际编程中非常实用,可以方便地求解两个数的最大公约数和最小公倍数。
希望本文内容能够对你有所帮助。
C语言是一种广泛应用的编程语言,因其灵活性和高效性而备受程序员的青睐。
在C语言中,计算最大公约数和最小公倍数是常见的算法问题,对于解决一些数学和工程问题有着重要的意义。
在本文中,我们将进一步扩展讨论C语言中计算最大公约数和最小公倍数的应用以及相关的优化和实际应用案例。
三、辗转相除法的优化上文提到的辗转相除法是一种非常经典且有效的计算最大公约数的方法,但在实际应用中也可以进行一些优化。
其中一个优化方法是使用更高效的取模运算,例如利用位运算来代替简单的求余操作。
原始的辗转相除法每次需要进行一次取余操作,而改进后的算法可以通过移位运算来代替部分取模运算,减少了计算量,从而提高了算法的效率。
c语言循环结构求最大公约数和最小公倍数下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。
文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!C语言循环结构求最大公约数和最小公倍数在日常生活和数学计算中,经常会涉及到最大公约数和最小公倍数的计算。
c语言编程计算题一、题目:求两个数的最大公约数和最小公倍数要求:1.输入两个整数a和b(a>b)。
2.使用辗转相除法求最大公约数,使用最小公倍数等于两数之积除以最大公约数的公式求最小公倍数。
3.输出结果,包括最大公约数和最小公倍数。
参考解答:#include<stdio.h>intmain(){inta,b,gcd,lcm;printf("请输入两个整数:\n");scanf("%d%d",&a,&b);if(a<b){inttemp=a;a=b;b=temp;}gcd=a;while(b!=0){gcd=gcd*b%b;b--;}lcm=a*b/gcd;printf("最大公约数是:%d\n",gcd);printf("最小公倍数是:%d\n",lcm);return0;}二、题目:求一个数的阶乘要求:1.输入一个正整数n。
2.使用循环语句计算n的阶乘,即n!=n*(n-1)*...*2*1。
3.输出结果。
参考解答:#include<stdio.h>intmain(){intn;printf("请输入一个正整数:\n");scanf("%d",&n);longlongfactorial=1;for(inti=1;i<=n;i++){factorial*=i;}printf("%d的阶乘为:%lld\n",n,factorial);return0;}三、题目:求斐波那契数列的前n项和要求:1.输入一个正整数n,表示斐波那契数列的项数。
2.使用循环语句和累加器求斐波那契数列的前n项和。
具体来说,第i项的值等于前两项的值之和,即f(i)=f(i-1)+f(i-2)。
将每一项的值累加到结果中即可。
3.输出结果。
c语言编程计算最大公约数,最下公倍数辗转相除法辗转相除法,又称欧几里德算法,是一种用于计算两个整数的最大公约数的算法。
它是由古希腊数学家欧几里德在其著作《几何原本》中首次描述的。
辗转相除法的原理很简单,它基于一个数学定理:两个整数的最大公约数等于其中较小的数和两数相除的余数的最大公约数。
即如果a 和b是两个整数,且a > b,则a和b的最大公约数等于b和a%b的最大公约数。
下面我们用C语言来实现辗转相除法:```c#include <stdio.h>int gcd(int a, int b) {while (b != 0) {int temp = a % b;a = b;b = temp;}return a;}int lcm(int a, int b) { return a * b / gcd(a, b); }int main() {int a, b;printf("请输入两个整数:"); scanf("%d %d", &a, &b);int gcdResult = gcd(a, b);int lcmResult = lcm(a, b);printf("最大公约数是:%d\n", gcdResult);printf("最小公倍数是:%d\n", lcmResult);return 0;}```在上面的代码中,首先定义了两个函数`gcd`和`lcm`分别用于计算最大公约数和最小公倍数。
在`gcd`函数中,我们使用`while`循环来不断更新`a`和`b`的值,直到`b`变为零。
在每次循环中,我们通过`temp`变量暂存`a`对`b`取模的值,并通过赋值语句更新`a`和`b`的值。
当`b`变为零时,循环结束,此时`a`的值就是最大公约数。
在`lcm`函数中,我们通过`a`和`b`的乘积除以最大公约数来计算最小公倍数。
《C 语言输出最大公约数和最小公倍数》在 C 语言编程中,计算最大公约数和最小公倍数是非常常见的需求之一。
它们是数学中的基本概念,对于计算机科学以及实际问题中都具有重要的意义。
本文将深入探讨如何在 C 语言中输出最大公约数和最小公倍数,并结合实际问题进行分析和应用。
## 1. 最大公约数让我们明确最大公约数的定义。
最大公约数,英文为 Greatest Common Divisor,通常缩写为 GCD,是两个整数的共同约数中最大的一个。
在 C 语言中,我们可以使用欧几里得算法来高效地计算两个数的最大公约数。
欧几里得算法的基本思想是通过不断取余的方式,直到余数为 0,那么除数就是最大公约数。
以下是 C 语言中计算最大公约数的代码示例:```cint gcd(int a, int b) {if (b == 0) {return a;} else {return gcd(b, a % b);}}```在上述代码中,我们定义了一个名为 `gcd` 的函数,它接收两个整数参数 `a` 和 `b`,然后通过递归调用自身来计算最大公约数。
这种递归的实现思路非常巧妙,而且在实际的程序中也能够高效地运行。
## 2. 最小公倍数接下来,让我们来讨论最小公倍数。
最小公倍数,英文为 Least Common Multiple,通常缩写为 LCM,是两个整数的共同倍数中最小的一个。
在C 语言中,我们可以通过最大公约数来计算最小公倍数,因为有一个基本的性质:两个整数的最大公约数与它们的最小公倍数的乘积等于这两个整数的乘积。
以下是 C 语言中计算最小公倍数的代码示例:```cint lcm(int a, int b) {return a / gcd(a, b) * b;}```在上述代码中,我们定义了一个名为 `lcm` 的函数,用来计算两个整数的最小公倍数。
通过调用之前我们定义的 `gcd` 函数,可以非常方便地实现对最小公倍数的计算。
最大公约数与最小公倍数c语言最大公约数和最小公倍数是数学中常见的概念,它们有着广泛的应用,尤其在计算机科学和数学领域中。
在本文中,我们将探讨最大公约数和最小公倍数的定义、计算方法以及它们的应用。
最大公约数(Greatest Common Divisor,简称GCD)是指能够同时整除两个或多个整数的最大正整数。
在数学中,最大公约数的定义可以通过辗转相除法(Euclidean algorithm)来实现。
辗转相除法是一种基于整除的算法,它通过不断地将两个数中较大的数除以较小的数来得到它们的余数,然后将较小的数和余数继续进行对除运算。
当两个数的余数为0时,较小的数即为最大公约数。
辗转相除法的算法如下:```cint gcd(int a, int b) {if (b == 0) {return a;}return gcd(b, a % b);}```在这个递归算法中,如果b等于0,则直接返回a作为最大公约数;否则,继续通过计算b和a除以b的余数来递归调用gcd函数,直到找到最大公约数为止。
最小公倍数(Least Common Multiple,简称LCM)是指能够同时被两个或多个整数整除的最小正整数。
最小公倍数可以通过两个数的乘积除以它们的最大公约数来计算。
具体算法如下:```cint lcm(int a, int b) {return a * b / gcd(a, b);}```在这个算法中,先计算a和b的最大公约数,然后用a和b的乘积除以最大公约数,得到最小公倍数。
最大公约数和最小公倍数在数学中有着广泛的应用。
首先,它们可以帮助我们化简分数。
我们可以通过将分子和分母同时除以它们的最大公约数,来得到一个分子和分母互质的分数。
其次,最大公约数和最小公倍数在求解线性方程和同余方程时也起到了重要的作用。
在解决这些方程时,我们需要找到一个整数解,而最大公约数和最小公倍数可以帮助我们找到所有的解。
另外,最大公约数和最小公倍数还在计算机科学中有着广泛的应用。
迭代法求最大公约数和最小公倍数引言最大公约数和最小公倍数是数论中的重要概念,它们在实际应用中经常被用到。
本文将介绍一种用迭代法求解最大公约数和最小公倍数的方法。
最大公约数两个或多个整数的最大公约数(Greatest Common Divisor,简称GCD)是能够同时整除它们的最大整数。
算法思想两个整数的最大公约数可以通过辗转相除法(欧几里德算法)来求解。
迭代的过程是将两个数中较大的数除以较小的数,然后再将所得的余数与较小的数相除,直到余数为0为止,最后的除数就是最大公约数。
代码实现#include <stdio.h>int gcd(int a, int b) {int r;while (b != 0) {r = a % b;a = b;b = r;}return a;}int main() {int a, b;printf("请输入两个整数:");scanf("%d %d", &a, &b);int result = gcd(a, b);printf("最大公约数为:%d\n", result);return0;}最小公倍数两个或多个整数的最小公倍数(Least Common Multiple,简称LCM)是能够同时被它们整除的最小整数。
算法思想两个整数的最小公倍数可以通过求解它们的最大公约数来得到。
根据数学原理,两个整数的乘积等于它们的最大公约数与最小公倍数的积。
因此,我们可以通过最大公约数求得最小公倍数的公式:lcm(a, b) = |a * b| / gcd(a, b)代码实现#include <stdio.h>int gcd(int a, int b) {int r;while (b != 0) {r = a % b;a = b;b = r;}return a;}int lcm(int a, int b) {int result = (a * b) / gcd(a, b);return result;}int main() {int a, b;printf("请输入两个整数:");scanf("%d %d", &a, &b);int result = lcm(a, b);printf("最小公倍数为:%d\n", result);return0;}总结本文介绍了使用迭代法来求解最大公约数和最小公倍数的方法。
C语言最大公约数和最小公倍数1. 什么是最大公约数和最小公倍数?最大公约数(Greatest Common Divisor,简称GCD),又称最大公因数,指的是两个或多个整数共有约数中最大的一个。
例如,8和12的最大公约数是4。
最小公倍数(Least Common Multiple,简称LCM),又称最小公倍数,指的是能被两个或多个整数同时整除的最小正整数。
例如,8和12的最小公倍数是24。
在算法实现中,我们可以使用辗转相除法、欧几里得算法等来求解两个整数的最大公约数和最小公倍数。
2. 最大公约数算法实现2.1 辗转相除法辗转相除法(又称欧几里得算法)是求取两个正整数a和b的最大公约数的一种方法。
其基本思想是通过不断用较小的数字去除较大的数字,并用余数替换较大的数字,直到余数为0为止。
此时,较小的数字即为所求的最大公约数。
以下是使用辗转相除法实现求解两个正整数a和b的最大公约数gcd(a, b):int gcd(int a, int b) {if (b == 0) {return a;} else {return gcd(b, a % b);}}2.2 欧几里得算法欧几里得算法是辗转相除法的一种更高效的实现方式。
其原理是根据以下等式进行迭代计算:gcd(a, b) = gcd(b, a % b)以下是使用欧几里得算法实现求解两个正整数a和b的最大公约数gcd(a, b):int gcd(int a, int b) {while (b != 0) {int temp = a % b;a = b;b = temp;}return a;}3. 最小公倍数算法实现3.1 最小公倍数与最大公约数的关系最小公倍数可以通过最大公约数来求解。
根据以下等式成立:lcm(a, b) = (a * b) / gcd(a, b)因此,我们可以先求解最大公约数,然后通过上述等式来计算最小公倍数。
3.2 求解最小公倍数以下是使用最大公约数来求解两个正整数a和b的最小公倍数lcm(a, b):int lcm(int a, int b) {int gcdValue = gcd(a, b);return (a * b) / gcdValue;}4. 示例代码下面是一个完整的示例代码,展示了如何使用C语言实现最大公约数和最小公倍数的计算:#include <stdio.h>int gcd(int a, int b) {if (b == 0) {return a;} else {return gcd(b, a % b);}}int lcm(int a, int b) {int gcdValue = gcd(a, b);return (a * b) / gcdValue;}int main() {int num1, num2;printf("请输入两个正整数:\n");scanf("%d %d", &num1, &num2);printf("最大公约数:%d\n", gcd(num1, num2));printf("最小公倍数:%d\n", lcm(num1, num2));return 0;}5. 总结本文介绍了C语言中求解最大公约数和最小公倍数的算法实现。
C语言输入两个正整数m和n求其最大公约数和最小公倍数输入两个正整数m和n, 求其最大公约数和最小公倍数. <1> 用辗转相除法求最大公约数算法描述: m对n求余为a, 若a 不等于0 则m <- n, n <- a, 继续求余否则n 为最大公约数<2> 最小公倍数= 两个数的积/ 最大公约数#include int main(){int m, n; int m_cup, n_cup, res; /*被除数, 除数, 余数*/printf("Enter two integer:\n");scanf("%d %d", &m, &n);if (m > 0 && n >0){m_cup = m;n_cup = n;res = m_cup % n_cup;while (res != 0){m_cup = n_cup;n_cup = res;res = m_cup % n_cup;}printf("Greatest common divisor: %d\n", n_cup);printf("Lease common multiple : %d\n", m * n / n_cup);}else printf("Error!\n");return 0;}★关于辗转相除法, 搜了一下, 在我国古代的《九章算术》中就有记载,现摘录如下: 约分术曰:“可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。
以等数约之。
” 其中所说的“等数”,就是最大公约数。
求“等数”的办法是“更相减损”法,实际上就是辗转相除法。
辗转相除法求最大公约数,是一种比较好的方法,比较快。
对于52317和75569两个数,你能迅速地求出它们的最大公约数吗?一般来说你会找一找公共的使因子,这题可麻烦了,不好找,质因子大。
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 #include2 int main() /* 辗转相除法求最大公约数*/3 {4 int m, n, a, b, t, c;5 printf("Input two integer numbers:\n");6 scanf("%d%d",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:%d\n", a);11 printf("The least common multiple:%d\n", 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③若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 #include2 int main ( ) /* 相减法求最大公约数*/3 {4 int m, n, a, b, c;5 printf("Input two integer numbers:\n");6 scanf ("%d,%d", m=a; n=b;7 /* a, b不相等,大数减小数,直到相等为止。
C语言求最小公倍数
问题描述
求任意两个正整数的最小公倍数(LCM)。
问题分析
最小公倍数(Least Common Multiple,LCM),如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数,对于两个整数来说,指该两数共有倍数中最小的一个。
计算最小公倍数时,通常会借助最大公约数来辅助计算。
最小公倍数=两数的乘积/最大公约(因)数,解题时要避免和最大公约(因)数问题混淆。
对于最小公倍数的求解,除了利用最大公约数外,还可根据定义进行算法设计。
要求任意两个正整数的最小公倍数即,求出一个最小的能同时被两整数整除的自然数。
算法设计
对于输入的两个正整数m和n每次输入的大小顺序可能不同,为了使程序具有一般性,首先对整数所m和n进行大小排序,规定变量m中存储大数、变量n中存储小数。
输入的两个数,大数m是小数n的倍数,那么大数m即为所求的最小公倍数;若大数m 不能被小数n整除则需要寻找一个能同时被两数整除的自然数。
从大数m开始依次向后递增直到找到第一个能同时被两数整除的数为止,所以循环变量i的初值为寻找第一个能同时
被两整数整除的自然数,并将其输出。
需要注意的是,在找到第一个满足条件的i值后,循环没必要继续下去,所以用break来结束循环。
在上面的分析过程中没有提到循环变量的终止条件,因i的最大值不能确定,像这种终止条件不确定的情况如何来表示?方法有两种,第一,可以把判定条件表示成循环变量满足的基本条件,如本例终止条件可表示成i>0;第二,终止条件省略不写,利用循环体中的语句结束循环,如在找到第一个满足条件的自然数时利用break语句结束循环。
下面是完整的代码:
1.#include<stdio.h>
2.int main()
3.{
4.int m, n, temp, i;
5.printf("Input m & n:");
6.scanf("%d%d",&m,&n);
7.if(m<n)/*比较大小,使得m中存储大数,n中存储小数*/
8.{
9. temp = m;
10. m = n;
11. n = temp;
12.}
13.for(i=m; i>0; i++)/*从大数开始寻找满足条件的自然数*/
14.if(i%m==0&& i%n==0)
15.{/*输出满足条件的自然数并结束循环*/
16.printf("The LCW of %d and %d is: %d\n", m, n, i);
17.break;
18.}
19.
20.return0;
21.}
运行结果:
Input m & n:6 24
The LCW of 24 and 6 is: 24。