C实现最大公约数和最小公倍数
2013-06-05 22:33
260 查看
题目:C实现最大公约数和最小公倍数。
分析:
原文链接:http://www.baidu.com/p/csg974?from=zhidao
反过来从已知两个整数思考,
拿30和18举例,分解质因数,
30=2*3*5
18=2*3*3
两者相同的部分是2*3,不同的部分是5和3。
所谓的最大公约数,就是指的这个相同的部分,它同时被两个整数包含在内,是两个整数共同的约数,所以是公约数,而且是最大的那个,因为你把所有相同的部分都取出来了。
所以30和18的最大公约数就是2*3=6。
而最小公倍数是什么呢,是两个整数的共有的倍数,就是既能包括第一个整数,也能包括第二个整数。
那么怎样包含呢?首先两者相同的部分2*3必须算上,然后要包含第一个整数,那就必须再算上两者不同的部分5,要包含第二个整数,就要包含第二个整数的那个不同的部分3。
所以最小公倍数就是最大公约数(相同部分)*第一个数的不同部分*第二个数的不同部分。这样就可以被两个整数同时整除了。而且也是最小的公倍数,再比它少一点就不能被某个整数整除了。
当然,两个整数相乘的话,也是公倍数,但这样相同部分就乘了2次,所以不是最小的。只有当两个整数最大公约数为1即互质的时候,就没有相同部分了,这时乘积就是最小公倍数。
所以回头看你这个题目。
最小公倍数÷最大公约数,结果就是算出两者不同的那部分。
然后把这个不同的部分分成两部分的乘积,再分别乘到最大公约数上,
就算出这两个整数。
要注意的是,把那个不同部分分成两部分的时候,不要把同样的质因数分到两边。
比如说不同的部分是3*5*5,那你就不能分成3*5和5,因为这样5就属于相同部分了,不属于不同部分,那样最大公约数和最小公倍数就变了,不可以的。
只能分成1和3*5*5,3和5*5。总之让相同的质因数放在相同的一边就好。
代码实现:
结果截图:
分析:
原文链接:http://www.baidu.com/p/csg974?from=zhidao
反过来从已知两个整数思考,
拿30和18举例,分解质因数,
30=2*3*5
18=2*3*3
两者相同的部分是2*3,不同的部分是5和3。
所谓的最大公约数,就是指的这个相同的部分,它同时被两个整数包含在内,是两个整数共同的约数,所以是公约数,而且是最大的那个,因为你把所有相同的部分都取出来了。
所以30和18的最大公约数就是2*3=6。
而最小公倍数是什么呢,是两个整数的共有的倍数,就是既能包括第一个整数,也能包括第二个整数。
那么怎样包含呢?首先两者相同的部分2*3必须算上,然后要包含第一个整数,那就必须再算上两者不同的部分5,要包含第二个整数,就要包含第二个整数的那个不同的部分3。
所以最小公倍数就是最大公约数(相同部分)*第一个数的不同部分*第二个数的不同部分。这样就可以被两个整数同时整除了。而且也是最小的公倍数,再比它少一点就不能被某个整数整除了。
当然,两个整数相乘的话,也是公倍数,但这样相同部分就乘了2次,所以不是最小的。只有当两个整数最大公约数为1即互质的时候,就没有相同部分了,这时乘积就是最小公倍数。
所以回头看你这个题目。
最小公倍数÷最大公约数,结果就是算出两者不同的那部分。
然后把这个不同的部分分成两部分的乘积,再分别乘到最大公约数上,
就算出这两个整数。
要注意的是,把那个不同部分分成两部分的时候,不要把同样的质因数分到两边。
比如说不同的部分是3*5*5,那你就不能分成3*5和5,因为这样5就属于相同部分了,不属于不同部分,那样最大公约数和最小公倍数就变了,不可以的。
只能分成1和3*5*5,3和5*5。总之让相同的质因数放在相同的一边就好。
代码实现:
#include<stdio.h> #include<math.h> void main() { int a; int n1,n2; int temp; int total; printf("input two number :"); scanf("%d%d",&n1,&n2); total=n1*n2; if(n1<n2) { temp=n1; n1=n2; n2=temp; } while((a=(n1%n2)!=0)) { n1=n2; n2=a; } printf("gcd=%d\n",n2); printf("lcm=%d\n",total/n2); }
结果截图:
相关文章推荐
- java 最大公约数 最小公倍数 用函数实现
- C语言实现3个数的最小公倍数和最大公约数
- (温故而知新) 最小公倍数最大公约数的 C实现
- 求两个整数的最小公倍数和最大公约数的算法及其C++实现
- C语言求最小公倍数与最大公约数(4种实现)
- 动态函数调用实现下列操作,输入2个数以及操作符计算结果。@求最大公约数 $求最小公倍数 -求差 +求和
- JAVA实现最大公约数和最小公倍数
- 用Java实现最大公约数与最小公倍数
- C/C++实现奇偶判断、质数判断、求解最大公约数、最小公倍数、最大奇约数等
- //动态函数调用实现下列操作,输入2个数以及操作符计算结果。@ 求最大公约数 $求最小公倍数 - 求差 + 求和 等等
- 最大公约数和最小公倍数实现
- java 最大公约数 最小公倍数 用函数实现
- 算法.数学.初级.求最小公倍数--(利用最大公约数的辗转相除法),powerbuilder powerscript实现
- 最大公约数和最小公倍数--java实现
- C++实现求解最大公约数和最小公倍数
- 最大公约数(递归与非递归实现),最小公倍数
- 动态函数调用实现下列操作,输入2个数以及操作符计算结果。@ 求最大公约数 $求最小公倍数 - 求差 + 求和 等等
- 最大公约数和最小公倍数(java实现)
- C语言实现素数,最小公倍数,最大公约数,回文数,质数,完数,水仙花数算法
- 用三种算法实现最大公约数(附两种算法算最小公倍数)