这题好毒瘤啊
(特别是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; }