【求最大公约数(gcd)和最小公倍数(lcm)算法】1.最大公约数:
算法思想是欧几里得的辗转相除法,gcd(a,b)=gcd(b,a%b)。
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
2.最小公倍数:
最小公倍数的求法利用了最大公约数,即lcm(a,b)=a/gcd(a,b)*b
int lcm(int a,int b){
return a/gcd(a,b)*b;
}
注意: 不要写成a*b/gcd(a,b),看似相等,但是当a和b很大时会发生溢出!!
推荐阅读
- AIoT(人工智能+物联网)|程序员的数学【线性代数基础】
- topcoder|Topcoder SRM 661 Div1 Easy: MissingLCM
- HDU 5184 Brackets (卡特兰数)
- 高斯消元
- 水题纪念|【51nod - 1098】 最小方差(基础数学,公式化简,前缀和,积的前缀和)
- 扩展欧几里德算法(gcd扩展使用)
- 数学|CF 514D.Nature Reserve 几何,二分,交集
- codeforces|Codeforces Round #665 (Div. 2) C. Mere Array(数学)
- codeforces|Codeforces Round #665 (Div. 2) A. Distance and Axis(思维,数学)
- 数论|Codeforces Global Round 10 B. Omkar and Infinity Clock(数学)