zoukankan      html  css  js  c++  java
  • Codeforces Round #552:G. Minimum Possible LCM

     官方题解是时间复杂度为O(nd)的。这里给出一个简单实现但是时间复杂度为O(NlogN) (N=1e7)

    因为 a*b/gcd(a,b)=lcm(a,b) 所以我们可以枚举每一个因子,然后找到存在这个因子的 最小的两个数(只要最小的两个即可,因为后面较大数的数的lcm肯定会比较小的两个数的lcm大)。

    在这些答案中取最小的即可。

    代码实现也十分简洁:

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long LL;
    const int N=1e7+10;
    int n,a[N],c[N];
    vector<int> v;
    
    int main()
    {
        cin>>n;
        LL ans=1LL<<60,r1,r2;
        for (int i=1;i<=n;i++) {
            scanf("%d",&a[i]); 
            if (!c[a[i]]) c[a[i]]=i;
            else if (a[i]<ans) {
                ans=a[i]; r1=c[a[i]]; r2=i;
            }
        }
        
        for (int i=1;i<N;i++) {
            v.clear();
            for (int j=i;j<N;j+=i) {
                if (c[j]) v.push_back(j);
                if (v.size()>=2) break;
            }
            if (v.size()<2) continue;
            LL tmp=(LL)v[0]*v[1]/i;
            if (tmp<ans) {
                ans=tmp;
                r1=c[v[0]]; r2=c[v[1]];
            }
        }
        if (r1>r2) swap(r1,r2);
        cout<<r1<<" "<<r2<<endl;
        return 0;
    }
  • 相关阅读:
    complete完成量——实例分析
    worker线程的创建与使用
    SDIO接口
    Linux中V4L2分析
    Linux系统调用分析
    ppm图片显示
    应用层与内核层错误打印函数总结
    高通Sensor驱动学习笔记
    linux中新增一个shell命令的方法
    RTC测试程序
  • 原文地址:https://www.cnblogs.com/clno1/p/10761283.html
Copyright © 2011-2022 走看看