您的位置:首页 > 其它

算法训练 最大最小公倍数

2017-01-29 14:27 232 查看
问题描述

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

输入格式

输入一个正整数N。

输出格式

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

样例输入

9

样例输出

504

数据规模与约定

1 <= N <= 106。

思路:

        若数为奇数,则结果就是最后3个的乘积,若是大于3的偶数将3个数在小于n的数里面穷举,求3个数的最小公倍数

代码:

#include<iostream>
using namespace std;
long long gbs(long long  x,long long y)
{
long long  s,t;
if (x<y)
{
t=x;x=y;y=t;
}
s=x*y;
while (y)
{
t=x%y;
x=y;
y=t;
}
return s/x;
}
int main()
{
long long n,s,max=0,i,j,k;
cin>>n;
if (n<=2)
max=n;
else if (n%2==1)
{
max=n*(n-1)*(n-2);
}
else
{
for (i=n;i>=n-10&&i>0;i--)
for (j=i-1;j>=n-10&&j>0;j--)
for (k=i-2;k>=n-10&&k>0;k--)
{
s=gbs(i,gbs(j,k)); //3数公倍数
if (s>max)
{
max=s;
}
}
}
cout<<max;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: