超级码力在线编程大赛初赛 第3场 1.最大公倍数
https://tianchi.aliyun.com/oj/15179470890799741/85251759933690467
若a与b(a<b)的最大公因数为c,那么b-a>=c
如果b是奇数,那么答案就是b*(b-1)*(b-2)
因为相邻的3个数只能有公因数2,而b是奇数所以不会有两个偶数
如果b是偶数,若b不是3的倍数,那么答案就是b*(b-1)*(b-3)
因为如果选b (b-1) (b-2) ,最大是b*(b-1)*(b-2)/2,当b>=4时,b-3>=(b-2)/2
如果b是偶数,且b是3的倍数,那么答案就是(b-1)*(b-2)*(b-3)
因为如果选了b,同上。
注意当b-a=2时,若b是偶数,只能是b*(b-1)*(b-2)/2
(数学渣渣只会这样理解,如有错误感谢指出,嘤嘤嘤)
class Solution { public: /** * @param a: Left margin * @param b: Right margin * @return: return the greatest common multiple */ long long greatestcommonmultiple(int a, int b) { // write your code here if(b&1)) return 1ll*b*(b-1)*(b-2); else if(b-a==2) return b*(b-1)*(b-2)/2; else if(b%3) return 1ll*b*(b-1)*(b-3); else return 1ll*(b-1)*(b-2)*(b-3); } };