蓝桥杯-最大最小公倍数

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

输入格式
    输入一个正整数N。

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

如果按照正常的暴力搜索来解决问题,可想而知肯定会超时的,所以要知道一点:相邻的两个正整数是互斥的,而且互斥的正整数的最小公倍数就是这两个正整数的乘积。
如果输入的n是奇数,那么n、n-1、n-2必定是两两互斥的(两奇夹一偶)
如果输入的n是偶数,n和n-2必定有公因子2,因此我们将n-2换成n-3试一下,但如果偶数n本身就可以被3整除,那么n-3也可以被3整除,所以当n既是偶数,又可以被3整除的时候我们直接用n-1、n-2、n-3三个数(两奇夹一偶)的乘积来表示最大最小公倍数。

#include <iostream>

using namespace std;
/*
int main()
{
    long n;
    cin>>n;
    long long Max=0,LCM=1;
    for(int i=1;i<n;i++)
    {
        for(int j=i+1;j<n;j++)
        {
            for(int k=j+1;k<=n;k++)
            {
                int l=i,m=j,n=k;
                while(l%2==0&&m%2==0&&n%2==0){
                    LCM*=2;
                    l/=2;m/=2;n/=2;
                }
                LCM=LCM*l*m*n;
                if(LCM>Max)Max=LCM;
                LCM=1;
            }
        }
    }
    cout<<Max;

    return 0;
}*/

int main(){
    long long n,ans;
    cin>>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);
    }
    cout<<ans;
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值