欧几里得辗转相除求最大公约数最小公倍数
2016-04-12 20:40
375 查看
最大公约数:
第一种方法:
递归:
int gcd(int m, int n)
{
int temp;
if(m < n)//m less than n change
{
temp = m;
m = n;
n = temp;
}
if(m % n == 0)//eg. 9 3 de gcd is 3 because 9 % 3 == 0
return n;
else
return gcd(n,m%n);//欧几里得辗转相除法求最大公约数 gcd(m,n) == gcd(n,m%n) 递归可得
}
第二种方法:
循环:
int gcd2(int m, int n)
{
int temp, k;
if(m < n)//m less than n change
{
temp = m;
m = n;
n = temp;
}
if(m % n == 0)//eg. 9 3 de gcd is 3 because 9 % 3 == 0
return n;
while(m % n != 0)
{
k = m;//k 存一下m的值
m = n;//新的m 的值 为 n
n = k % n;//n 的值在这个表达式之前没变
if(m%n == 0)
return n;
}
}
最小公倍数:
最小公倍数为两个数之乘除于最大公约数
int gbs(int m, int n)
{
return m*n / gcd(m,n);
}
第一种方法:
递归:
int gcd(int m, int n)
{
int temp;
if(m < n)//m less than n change
{
temp = m;
m = n;
n = temp;
}
if(m % n == 0)//eg. 9 3 de gcd is 3 because 9 % 3 == 0
return n;
else
return gcd(n,m%n);//欧几里得辗转相除法求最大公约数 gcd(m,n) == gcd(n,m%n) 递归可得
}
第二种方法:
循环:
int gcd2(int m, int n)
{
int temp, k;
if(m < n)//m less than n change
{
temp = m;
m = n;
n = temp;
}
if(m % n == 0)//eg. 9 3 de gcd is 3 because 9 % 3 == 0
return n;
while(m % n != 0)
{
k = m;//k 存一下m的值
m = n;//新的m 的值 为 n
n = k % n;//n 的值在这个表达式之前没变
if(m%n == 0)
return n;
}
}
最小公倍数:
最小公倍数为两个数之乘除于最大公约数
int gbs(int m, int n)
{
return m*n / gcd(m,n);
}
相关文章推荐
- 希尔排序
- 使用python来处理excel表《1》
- 在myeclipse中快速搭建Struts2框架
- hdu1241
- shell学习
- codeforces_598C. Nearest vectors(极角排序)
- 构建高并发高可用的电商平台架构实践
- Android应用开发中如何进行单元测试
- 程序内存分析
- C++第三次作业
- Android Runtime(ART)编译过程与所谓suspend-points
- 百度地图定位,高德地图定位
- 奇怪的排序
- 15Knight Moves
- 用Redis存储Tomcat集群的Session
- 项目报告
- LeetCode 337. House Robber III
- c++实验2—学生成绩
- 一、Centos6.7编译安装apache2.4.9
- Laxcus大数据管理系统2.0(5)- 第三章 数据存取