求两数最大公约数
2013-10-18 15:41
288 查看
可以使用穷举法:
int func(int x,int y)//返回x和y的最大公约数
{
int z;
x<y?z=x:z=y;
while(1)
{
if(x%z==0 && y%z==0)
return z;
z--;
}
}
效率太差。
使用辗转相除法
辗转相除法原理:两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。
辗转相除法是利用以下性质来确定两个正整数 a 和 b 的最大公因子的:
1. 若 r 是 a ÷ b 的余数,则
gcd(a,b) = gcd(b,r)
2. a 和其倍数之最大公因子为 a。
另一种写法是:
1. a ÷ b,令r为所得余数(0≤r<b)
若 r = 0,算法结束;b 即为答案。
2. 互换:置 a←b,b←r,并返回第一步
Java语言如下:
public static int gcd(int m, int n) {
while (true) {
if ((m = m % n) == 0)
return n;
if ((n = n % m) == 0)
return m;
}
}
int func(int x,int y)//返回x和y的最大公约数
{
int z;
x<y?z=x:z=y;
while(1)
{
if(x%z==0 && y%z==0)
return z;
z--;
}
}
效率太差。
使用辗转相除法
辗转相除法原理:两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。
辗转相除法是利用以下性质来确定两个正整数 a 和 b 的最大公因子的:
1. 若 r 是 a ÷ b 的余数,则
gcd(a,b) = gcd(b,r)
2. a 和其倍数之最大公因子为 a。
另一种写法是:
1. a ÷ b,令r为所得余数(0≤r<b)
若 r = 0,算法结束;b 即为答案。
2. 互换:置 a←b,b←r,并返回第一步
Java语言如下:
public static int gcd(int m, int n) {
while (true) {
if ((m = m % n) == 0)
return n;
if ((n = n % m) == 0)
return m;
}
}
相关文章推荐
- 第十周项目求两数的最大公约数
- 两数的最大公约数、最小公倍数
- 如何求两数的最大公约数多种方法
- 求两数的最大公约数
- 用递归函数求两数的最大公约数
- acm-求两数最大公约数和最小公倍数
- C语言----求两数最大公约数和最小公倍数
- php 辗转相除法获取两数的最大公约数
- 第十三周项目4-递归法求两数最大公约数
- 【欧几里算法】寻找两数的最大公约数
- 文章标题 欧几里得求两数的最大公约数,最小公倍数。
- 用C语言编写程序:求两数的最大公约数。
- 求两数的最大公约数 Python 版
- java-两数最大公约数
- 求两数最大公约数和最小公倍数
- 第十一周项目2-求两数最大公约数
- python(四) 求两数的GCD(最大公约数)
- 递归实现求两数最大公约数
- 求两数的最大公约数
- 两数的最大公约数