算法训练-最大最小公倍数

题目要求

已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。

需要理解的性质

  1. 1和任意大于1的自然数都互质
  2. 2和任意奇数都互质
  3. 相邻的两个自然数互质
  4. 相邻的两个奇数互质
  5. 不相同的两个质数互质
  6. 一个数是合数,另一个是质数,除合数是质数的倍数外,一般都是互质的,例:34和7

所以

  1. n为奇数
    ans = n * (n-1) * (n-2);

  2. n为偶数
    1˚ n%3 != 0时 ans = n(n-1)(n-3);
    2˚ n%3 == 0时 ans = (n-1)(n-2)(n-3);

#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long ll;
int main(){
    int n;
    cin>>n;
    ll ans;
    if(n % 2)
        ans = (ll)n*(n-1)*(n-2);
    else if(n % 3 == 0)
        ans = (ll)(n-1)*(n-2)*(n-3);
    else
        ans = (ll)n*(n-1)*(n-3);
    cout<

(留下了数学成绩不好的眼泪……

你可能感兴趣的:(算法训练-最大最小公倍数)