超级码力在线编程大赛初赛 第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);
    }
};

 

posted @ 2020-09-18 21:20  TRTTG  阅读(172)  评论(0编辑  收藏  举报