Codeforces 236C LCM Challenge 数论(基础题)
2017-01-16 15:23
253 查看
点击打开链接
题意:找到三个数<=n (n<=1e6)&&使LCM(a,b,c)尽量大
LCM=(a*b*c)/(d1*d2) d1为gcd(a,b) d2为gcd(ab/d1,c)
n<3特判
n>3:分以下两种情况
若n为奇数: n-1为偶数与n,n-1都互质&&gcd(n,n-2)=1(n为奇数) 设d|n&&d|n-2 则d|2 d<=2 由n为奇数得 d=1
所以三个数两两互质 直接相乘就能得到最大的LCM
若n为偶数 可得一个LCM k1=(n-1)(n-2)(n-3) 可能比k1大的只有当n%3!=0 -> gcd(n,n-3)=1 LCM(n,n-1,n-3)=n*(n-1)*(n-3)>k1
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+20;
ll n,ans;
ll gcd(ll a,ll b)
{
return a%b==0? b:gcd(b,a%b);
}
int main()
{
while(cin>>n)
{
if(n>=3)
{
if(n%2)
cout<<n*(n-1)*(n-2)<<endl;//奇数开头三个数互质
else
{
ll k1=(n-1)*(n-2)*(n-3);
//显然n%2==0&&n>3,LCM(n,n-1,n-2)<k1
//当n%2==0&&n%3!=0 -> gcd(n,n-3)=1 LCM(n,n-1,n-3)=n*(n-1)*(n-3)>k1
ll k2=0;
if(n%3)
{
k2=n*(n-1)*(n-3);
}
cout<<max(k1,k2)<<endl;
}
}
else
{
if(n==1)
cout<<1<<endl;
else if(n==2)
cout<<2<<endl;
}
}
return 0;
}
题意:找到三个数<=n (n<=1e6)&&使LCM(a,b,c)尽量大
LCM=(a*b*c)/(d1*d2) d1为gcd(a,b) d2为gcd(ab/d1,c)
n<3特判
n>3:分以下两种情况
若n为奇数: n-1为偶数与n,n-1都互质&&gcd(n,n-2)=1(n为奇数) 设d|n&&d|n-2 则d|2 d<=2 由n为奇数得 d=1
所以三个数两两互质 直接相乘就能得到最大的LCM
若n为偶数 可得一个LCM k1=(n-1)(n-2)(n-3) 可能比k1大的只有当n%3!=0 -> gcd(n,n-3)=1 LCM(n,n-1,n-3)=n*(n-1)*(n-3)>k1
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+20;
ll n,ans;
ll gcd(ll a,ll b)
{
return a%b==0? b:gcd(b,a%b);
}
int main()
{
while(cin>>n)
{
if(n>=3)
{
if(n%2)
cout<<n*(n-1)*(n-2)<<endl;//奇数开头三个数互质
else
{
ll k1=(n-1)*(n-2)*(n-3);
//显然n%2==0&&n>3,LCM(n,n-1,n-2)<k1
//当n%2==0&&n%3!=0 -> gcd(n,n-3)=1 LCM(n,n-1,n-3)=n*(n-1)*(n-3)>k1
ll k2=0;
if(n%3)
{
k2=n*(n-1)*(n-3);
}
cout<<max(k1,k2)<<endl;
}
}
else
{
if(n==1)
cout<<1<<endl;
else if(n==2)
cout<<2<<endl;
}
}
return 0;
}
相关文章推荐
- [Asia - Hefei - 2008/2009][B:Discrete Square Roots][数论基础] 还是不是很懂,先转
- 同余(数论基础)
- 数论基础(维诺格拉多夫著,裘光明译) 勘误
- virtual hust 2013.6.20 数论基础题目 A - Skew Binary
- virtual hust 2013.6.20 数论基础题目 E - Uniform Generator
- virtual hust 2013.6.20 数论基础题目 B- Light, more light
- 数论基础(维诺格拉多夫著,裘光明译) 勘误
- 数论 基础
- 数论基础知识归纳
- [数论]基础类库、函数库
- 数论基础_线性同余方程
- 数论基础_欧拉函数
- 《数论》3.6习题3------求一元线性同余方程所有解(不是方程组)基础练习例子&&求逆元
- 数论基础_扩展欧几里得算法
- [数论]数论的基础知识——最大公约数、最小公倍数
- 数论基础算法
- 数论基础_欧几里德算法
- 数论基础
- virtual hust 2013.6.20 数论基础题目 I - Code Refactoring
- virtual hust 2013.6.20 数论基础题目 F - Pseudo-Random Numbers