1.3 最大公约数和最小公倍数

来源:互联网 发布:生化危机7知乎 编辑:程序博客网 时间:2024/05/02 01:30

整数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;elsereturn 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;}


    


原创粉丝点击