1. 程式人生 > >最大最小公倍數 ( 演算法訓練 )

最大最小公倍數 ( 演算法訓練 )


時間限制:1.0s   記憶體限制:256.0MB
      
問題描述
已知一個正整數N,問從1~N中任選出三個數,他們的最小公倍數最大可以為多少。
輸入格式
輸入一個正整數N。
輸出格式
輸出一個整數,表示你找到的最小公倍數。
樣例輸入
9
樣例輸出
504
資料規模與約定

1 <= N <= 106。

/*找最大的三個兩兩互質的數,大於1的兩個相鄰的自然數必定互質,
如果n是奇數,那麼 n、n-1、n-2必定兩兩互質,首先 這三個數都不可能同時2整除,
假設剩下的n,n-2中有一個數能被3整除,那麼有公因子的數一定是n或n-2加減3才能得到的情況。
為此,n,n-1,n-2的乘積不僅是最大的,而且一定兩兩互質。
如果n是偶數,繼續分析n*(n-1)*(n-2),這樣的話n和n-2必定有公因子2,
那麼就換成式子n*(n-1)*(n-3)。然後仔細思考一下,
若偶數本身就能被3整除的話,n和n-3就有公因子3,這個式子也不成立了,
所以式子就變成了(n-1)*(n-2)*(n-3),這時候可以把n-1看成n,這樣就是上面說的n是奇數的情況了。
*/
#include <stdio.h>

int main (void)
{
	__int64 n, num;
	while(scanf("%I64d", &n) != EOF)
	{
		if(n < 3)
		{
			printf("%I64d\n", n);
		}
		else if(n % 2 != 0)
		{
			printf("%I64d\n", n * (n - 1) * (n - 2));
		}
		else
		{
			if(n % 3 != 0)
				printf("%I64d\n", n * (n - 1) * (n - 3));
			else
				printf("%I64d\n", (n - 1) * (n - 2) * (n - 3));
		}
	}

	return 0;
}