蓝桥杯 试题 算法训练 最大最小公倍数

问题描述

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

输入格式

输入一个正整数N。

输出格式

输出一个整数,表示你找到的最小公倍数。

样例输入

9

样例输出

504

数据规模与约定

1 <= N <= 106。

解题思路:

找规律。N内三个数最大的倍数肯定是n*(n-1)*(n-2)。但是前提是这三个数没有公约数。如果n是奇数,这三个数肯定没有公约数,因为如果有公约数,三个连续数的公约数只可能是2,n为奇数,结论成立。如果n是偶数,n和n-2就有了公约数,肯定要不能选,那么能不能选n-3,就看n是否是3的倍数,如果不是,就选(n-3)*(n-1)*n,如果是,就选(n-3)*(n-1)*(n-2)。

AC代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
using namespace std;
long long ans;
int main(){	
	long long n;
	cin>>n;
	if(n<3)//n为1,2时,选1,1,2
		ans=2;
	if(n%2)
		ans=n*(n-1)*(n-2);
	else{
		if(n%3)
			ans=(n-3)*(n-1)*n;
		else
			ans=(n-3)*(n-1)*(n-2);
	} 
	cout<<ans<<endl;
} 

发布了247 篇原创文章 · 获赞 53 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qq_42391248/article/details/104727780