题目描述
已知一个正整数N,问从1~N 中任选出三个数,他们的最小公倍数最大可以为多少。
输入描述
输入一个正整数 N。
1≤ N ≤106
输出描述
输出一个整数表示答案。
输入输出样例
输入:
9
输出:
504
最终代码c/c++
#include<bits/stdc++.h>
using namespace std;
int main(){
long long n; cin>>n;
if(n%2==1) cout<<n*(n-1)*(n-2);
else if(n%3!=0) cout<<n*(n-1)*(n-3);
else cout<<(n-1)*(n-2)*(n-3);
return 0;
}
过程理解
首先这三个数应该是两两互质的,如果不是互质的,它们就会有公约数,导致答案减少。而由于相邻的两个数必然互质,所以我们考虑以下情况:
- 如果N为奇数,那么N 与 N-2互质,则N、N-1,N-2为选定的3个数
- 如果N为偶数,那么 N 与 N-2 最大公约数为2,此时需要考虑N与N-3的关系:
如果N 不能被3整除,则 N-3 也不能被3整除,此时N与N-3互质,则N、N-1,N-3
为选定的3个数
如果N能被3整除,则N-3也能被3整除,此时N与N-3不互质,但是 N-1 与 N-3 必然互质(N-1、N-3都为奇数),所以N-1,N-2、N-3
即为选定的3个数。