几天以前,我学习了最小公倍数。玩得挺久了,想换换口味。
我不想用太多的数字,我想从1到n中选三个数字(可以相同)。使得他们的最小公倍数最大。
Input
单组测试数据。第一行有一个整数n (1≤n≤1,000,000)。
Output
输出一个整数表示选三个数字的最大的最小公倍数。
Input示例
97
Output示例
504210
思路:三个数的最小公倍数最大,那么就尽可能找到三个最大的互质的数。
①相邻数互质
②如果是奇数,相隔一位的数也互质 , 所以奇数时答案为 : n * (n-1)*(n-2)
③如果是偶数,答案为n*(n-1)*(n-3)。
但是又出现一个问题,n 和 (n-3) 当n % 3 == 0 时不互质。所以有多一种情况
④当n%3==0时,答案为 (n-1)*(n-2)*(n-3)
Code:
#include <bits/stdc++.h> #define LL unsigned long long using namespace std; int main(){ LL n; cin >> n ; if( n == 1 || n == 2 ) cout << n << endl; else if( n & 1 ){ cout << n * (n-1) * (n-2) << endl; }else{ if( n % 3 ){ cout << n * ( n - 1 ) * ( n - 3) << endl; }else{ cout << ( n - 1 ) * ( n - 2 ) * (n-3) << endl; } } return 0 ; }