整数a和b的最大公约数记为gcd(a,b) . 比如gcd(15,20)=5, gcd(0,20)=20. 特别的 我们定义gcd(0,0)=0.
1.如果q和r是a除以b的商和余数,即为a=b*q+r,则gcd(a,b)=gcd(b,r)
整数a和b的最小公倍数记为lcm(a,b). 比如lcm(8,12)=24,lcm(0,12)=0. lcm(0,0)=0.
1. lcm(a,b)=a*b/gcd(a,b)
基本算法
1.辗转相除法求最大公约数
gcd(a,b) //a,b不同时为0 a>=b
{
if(b==0)
return a;
esle
return gcd(b,a%b);
}
2.利用最大公约数求最小公倍数
lcm(a,b)
{
if(a*b==0)
return 0;
else
return a*b/gcd(a,b);
}
3.求a^b mod n (模指数)
modExp(a,b,n)
{
int t=1,y=a;
while(b!=0)
{ // 用二分法比一个一个乘更省时间~ 精巧啊!
if(b%2==1)
t=t*y%n;
y=y*y%n;
b=b/2;
}
return t;
}