我必须从一个数组中选择两个元素,这样lcm最大


  1. 简单的解决方案是对每个元素进行配对,然后找到最大LCM,但其时间复杂性为O(n^2(

    有其他解决方案可以降低的时间复杂度吗

    示例

    阵列=12,9,1,8

    LCM(12,9(=36

    LCM(12,1(=12

    LCM(12,8(=24

    LCM(9,1(=9

    LCM(9,8(=72

    LCM(1.8(=8

    所以,最大值是72。

#include<iostream>
#include<limits.h>
using namespace std;
void lcm(int a[],int n)
{
int i,j,k,l,s,lc=INT_MIN;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
s=a[i]<a[j]?a[i]:a[j];
l=a[i]>a[j]?a[i]:a[j];
for(k=0;k<s;k++)
{
if(l*(k+1)%s==0&&lc<l*(k+1))
{
lc=l*(k+1);
break;
}
}
}
}
cout<<"max lcm possible for a pair is= "<<lc;
}
int main()
{
int a[20],n,i;
cout<<"enter n= ";
cin>>n;
cout<<"enter an array= ";
for(i=0;i<n;i++)
{
cin>>a[i];
}
lcm(a,n);
}

**该代码是用c++编写的,不建议进行优化**

最新更新