求最大公约数
2016-12-11 20:42
183 查看
问题:求两个正整数的最大公约数。(假设两个正整数很大)
解法一.辗转相除法
Bigint gcd(Bigint x ,Bigint y)
{
return(!y) ? x: gcd(y,x%y);
}
解法二. 移位操作加减法操作
Bigint gdc(Bigint x,Bigint y)
{
if(x<y)
return gcd(y,x);
if(y==0)
return x;
else
{
return gcd(x-y,y);
}
}
解法三.结合大整数除法和移位运算
Bigint gcd(Bigint x,Bigint y)
{
if(x<y)
return gcd(y,x);
if(y==0)
{
return x;
}
else
{
if(IsEven(x))
{
if(IsEven(y))
return (gcd(x>>1,y>>1)<<1);
else
return gcd(x>>1,y);
}
else
{
if(IsEven(y))
return gcd(x,y>>1);
else
return gcd(y,x-y);
}
}
}
解法一.辗转相除法
Bigint gcd(Bigint x ,Bigint y)
{
return(!y) ? x: gcd(y,x%y);
}
解法二. 移位操作加减法操作
Bigint gdc(Bigint x,Bigint y)
{
if(x<y)
return gcd(y,x);
if(y==0)
return x;
else
{
return gcd(x-y,y);
}
}
解法三.结合大整数除法和移位运算
Bigint gcd(Bigint x,Bigint y)
{
if(x<y)
return gcd(y,x);
if(y==0)
{
return x;
}
else
{
if(IsEven(x))
{
if(IsEven(y))
return (gcd(x>>1,y>>1)<<1);
else
return gcd(x>>1,y);
}
else
{
if(IsEven(y))
return gcd(x,y>>1);
else
return gcd(y,x-y);
}
}
}
相关文章推荐
- 最大公约数的递归代码
- 输入两个正整数m和n,求其最大公约数和最小公倍数
- NOIP 2001普及组 最小公倍数和最大公约数问题 详解
- 程序员面试题----最大公约数
- 最大公约数和最小公倍数
- 最大公约数
- 输入两个正整数m和n,求其最大公约数和最小公倍数。
- 最大公约数 与 最小公倍数
- 求两个数的最大公约数
- JAVA辗转相除求最大公约数
- 两个数最大公约数
- 最大公约数的一些定理
- C_使用while语句求两整数的最小公倍数与最大公约数
- C语言 编写一个函数,传入a,b两个int类型的变量,返回两个值的最大公约数。
- 辗转相除法——求最大公约数的好方法
- noip2009 hankson的趣味题 (扩展欧几里得求最大公约数,最小公倍数与最大公约数)
- 最大公约数
- C语言实验——最小公倍数和最大公约数
- [UVa11426]最大公约数之和——极限版II
- 更相减损术求最大公约数-C