1. 程式人生 > >HustOJ 最大最小公倍數 (思維水題)

HustOJ 最大最小公倍數 (思維水題)

開始拿到這道題想的有點複雜了, 簡單來想, 為了使得最大LCM最大, 我們應該從N開始往下找, 找到三個最大的互質的數就好了

這個地方牽扯到數論中的一點兒基礎知識, 很簡單的知識

        1. 互質數: 兩個數的最大公約數是1的時候稱為互質數

        2. 相鄰的兩個自然數是互質數。如 15與 16。

        3. 相鄰的兩個奇數是互質數。如 49與 51。

這時候分類討論一下小於三和奇數, 偶數的情況就好了.

奇數直接取n, n-1, n-2, 偶數就再多判斷一下能不能被3餘的情況

#include<stdio.h>
int main()
{
    long long N;
    long long answer;
    while(scanf("%lld",&N)!=EOF){
        if(N<=2)
            answer = N;
        else if(N==3)
            answer = 6;
        else if(N%2==1)
            answer = N*(N-1)*(N-2);
        else{
            if(N%3==1 || N%3==2)
                answer = N*(N-1)*(N-3);
            else
                answer = (N-3)*(N-1)*(N-2);
        }
        printf("%lld\n",answer);
    }
}