1. 程式人生 > 實用技巧 >超級碼力線上程式設計大賽初賽 第3場 1.最大公倍數

超級碼力線上程式設計大賽初賽 第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); } };