C++求最大公约数和最小公倍数
2016-05-10 23:07
363 查看
常用算法:辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法。
辗转相除法的原理如下:
例如,求(319,377):
∵ 319÷377=0(余319)
∴(319,377)=(377,319);
∵ 377÷319=1(余58)
∴(377,319)=(319,58);
∵ 319÷58=5(余29),
∴ (319,58)=(58,29);
∵ 58÷29=2(余0),
∴ (58,29)= 29;
∴ (319,377)=29.
通过辗转相除从而得到最大公约数,暂时想到这个方法。以后再进行补充,以备忘。求最小公倍数就是这
两个数的乘积除以最大公约数即是,所以关键的问题还是怎么求最小公约数。C++代码如下:
<span style="font-family:Times New Roman;">#include<cstdio>
#include<cassert>
#include<cmath>
int main(){
long numA,numB,temp,mul;
scanf("%d %d",&numA,&numB);
if(numA<numB){
temp=numA;
numA=numB;
numB=temp;
}
mul=numA*numB;
while(numA%numB){
temp=numA%numB;
numA=numB;
numB=temp;
}
printf("最小公倍数:%d\n",mul/numB);
printf("最大公约数:%d\n",numB);
return 0;
}</span>
辗转相除法的原理如下:
例如,求(319,377):
∵ 319÷377=0(余319)
∴(319,377)=(377,319);
∵ 377÷319=1(余58)
∴(377,319)=(319,58);
∵ 319÷58=5(余29),
∴ (319,58)=(58,29);
∵ 58÷29=2(余0),
∴ (58,29)= 29;
∴ (319,377)=29.
通过辗转相除从而得到最大公约数,暂时想到这个方法。以后再进行补充,以备忘。求最小公倍数就是这
两个数的乘积除以最大公约数即是,所以关键的问题还是怎么求最小公约数。C++代码如下:
<span style="font-family:Times New Roman;">#include<cstdio>
#include<cassert>
#include<cmath>
int main(){
long numA,numB,temp,mul;
scanf("%d %d",&numA,&numB);
if(numA<numB){
temp=numA;
numA=numB;
numB=temp;
}
mul=numA*numB;
while(numA%numB){
temp=numA%numB;
numA=numB;
numB=temp;
}
printf("最小公倍数:%d\n",mul/numB);
printf("最大公约数:%d\n",numB);
return 0;
}</span>
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Lua和C语言的交互详解
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法