//不是故意弄成这样奇奇怪怪的格式的,在IDLE上写的笔记,懒得改了QAQ
若 b=a*q 即a|b
(b/a = q q是整数 )
则说 b 可以 被a整除
b是a的倍数
a是b的约数
若a,b相互整除,则a=b或-b
//greatest common divisor
gcd(a,b): a,b的最大公约数
即 a可以整除gcd,b也可以整除gcd 中最大的数
//least common multiple
lcm(a,b): a,b的最小公倍数
即 lcm可以整除a,也可b以整除b中 的最小的数
lcm(a,b)*gcd(a,b) = a*b
# 欧几里得算法:辗转相除法
# 原理: gcd(a,b) = gcd(b,a%b);
# 证明: 设 a = q*b + r
# 需证明:gcd(a,b)=gcd(b,r)
# 设d是a,b的公约数
# d|a,d|b
# r = a - q*b
# 根据正式性质
# d|a-q*b
# d|r
# 得证
int gcd(int a,int b){
if(b==0) return a;
/*
b=0 意味着 在上一轮递推中:
a % b=0,即pre_a可以被pre_b整除
根据 整式的性质 原始a 可以被 pre_b 整除
pre_b 就是 现在的a 因此返回a
*/
return gcd (b,a%b);
}
//递归实现
在#include<algorithm>中
有内置__gcd(a,b)
功能: 返回a和b 的最大公约数
!!!注意: 前面是2道下划线
欧几里得 辗转相除法
最新推荐文章于 2021-04-20 09:20:02 发布