CF235A 【LCM Challenge】

时间:2025-02-14 21:06:19

这题好毒瘤啊
(特别是long long的坑,调了半天没调好!!)
先将你特判一下小于3的话直接输出就是惹,不是的话就判断一下它能不能被2整除如果不能就直接输出n*(n-1)*(n-2)否则进行枚举
枚举核心代码:

	LL sum=0;
sum=i*j/gcd(i,j);
sum=sum*k/gcd(sum,k);
ans=max(ans,sum);

  求三个数的最小公倍数。

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL ans,n;
LL gcd(LL a,LL b){
if(!b)return a;
return gcd(b,a%b);
}
int main(){
scanf("%lld",&n);
if(n<=2){
printf("%lld",n);
return 0;
}
if(!(n%2)){
for(LL i=n;i>=n-100;i--){
if(i==0)break;
for(LL j=n;j>=n-100;j--){
if(j==0)break;
for(LL k=n;k>=n-100;k--){
if(k==0)break;
LL sum=0;
sum=i*j/gcd(i,j);
sum=sum*k/gcd(sum,k);
ans=max(ans,sum);
}
}
}
}
else ans=(n*(n-1)*(n-2));
printf("%lld",ans);
return 0;
}