算法训练 最大最小公倍数

算法训练 最大最小公倍数  
时间限制:1.0s   内存限制:256.0MB
   
问题描述

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

输入格式

输入一个正整数N。

输出格式
输出一个整数,表示你找到的最小公倍数。
样例输入
9
样例输出
504
数据规模与约定

1 <= N <= 106


思路:

刚开始想的就是简单的n*(n-1)*(n-2),理所应当的想成了n是奇数的情况。

如果n是偶数的情况的话,那么n和n-2肯定是有公约数2的。如果抛去n-2缩小数值考虑n-3。那么也需要判断n是否能够被3整除。如果不能整除那么最大的数值就是n*(n-1)*(n-3),不再需要向下考虑。如果是能够整除,再向下考虑的话,又会被2整除。那么我们需要定住(n-1)*(n-2)。(n-3)是奇数,此时最大的数值就是(n-1)*(n-2)*(n-3)。


小于等于2的时候情况单独处理,计算过程中n是long long类型的,不然会错误。


代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
    long long ans;
    long long n;
    scanf("%lld",&n);
    if(n<=2)
    {
        ans=n;
    }
    else if(n%2)
    {
        ans=n*(n-1)*(n-2);
    }
    else
    {
        if(n%3)
        {
            ans=n*(n-1)*(n-3);
        }
        else
        {
            ans=(n-1)*(n-2)*(n-3);
        }
    }
    printf("%lld",ans);
    return 0;
}


原文地址:https://www.cnblogs.com/lemonbiscuit/p/7776043.html