问题描述 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。 输入格式 输入一个正整数N。 输出格式 输出一个整数,表示你找到的最小公倍数。 样例输入 9 样例输出 5

时间:2021-12-11 00:30:42
#include<iostream>
using namespace std;
long long int Max=0;
void yueshu(int *a,int k)
{
int j=0;
for(int i=2;i<=k;)
{
if(k%i==0)
{
a[j++]=i;
//cout<<i<<"  ";
k=k/i;
}
else
++i;
}
//cout<<endl;
}
void find_same(int *a,int *b,int *result)
{
int i=0;
while((*a)!=0&&(*b)!=0)
{
if((*a)==(*b))
{
*result=*a;
//cout<<*a<<"  ";
++a;
++b;
++result;
}
else
{
if(*a>*b)
++b;
else
++a;
}
}
//cout<<endl;
}
void common_mul(int a,int b,int c)
{
int i=0,j=0,k=0,e=0;
int t_a[1000]={0},t_b[1000]={0},t_c[1000]={0},t[1000]={0},common[1000]={0};
yueshu(t_a,a);
yueshu(t_b,b);
yueshu(t_c,c);

find_same(t_a,t_b,t);
find_same(t,t_c,common);
long long int YueShu=1;
while(common[i]!=0)
YueShu=YueShu*common[i++];
YueShu=(a*b*c)/YueShu;
//cout<<YueShu<<endl;
if(YueShu>Max)
Max=YueShu;
}
int main()
{
int n;
cin>>n;
int a[1000];
int i,j,k;
for(i=2;i<=n;++i)
for(j=i+1;j<=n;++j)
for(k=j+1;k<=n;++k)
common_mul(i,j,k);
cout<<Max<<endl;
return 0;
}
做了几个小时,居然超时了。。。。。看来的优化算法。。后续改进