• 数论(lcm)


    CodeForces - 1154G

    题意:求最小的lcm(a,b)的下标;
    #include <bits/stdc++.h>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <iostream>
    #include <cstdio>
    #include <string>
    #include <stdio.h>
    #include <queue>
    #include <stack>
    #include <map>
    #include <set>
    #include <string.h>
    #include <vector>
    #define ME(x , y) memset(x , y , sizeof(x))
    #define SF(n) scanf("%d" , &n)
    #define rep(i , n) for(int i = 0 ; i < n ; i ++)
    #define INF  0x3f3f3f3f3f3f3f3fLL
    #define mod 1000000007
    #define PI acos(-1)
    using namespace std;
    typedef long long ll ;
    const int N = 1e7 + 5 ;
    int p[N] , n;
    
    
    int main()
    {
        int x , flaga , flagb ;//值,左下标,右下标
        ll minv ;//最小lcm值
        while(~scanf("%d" , &n))
        {
            memset(p , 0 , sizeof(p));//标记数组
            minv = INF ;
            for(int i = 1 ; i <= n ; i++)
            {
                scanf("%d" , &x);
                if(p[x] && x < minv)//出现了两次且小于原lcm,更新
                {
                    minv = x ;
                    flaga = p[x];
                    flagb = i ;
                }
                p[x] = i ;//标记该数出现
            }
            for(int i = 1 ; i < N && i < minv ; i++)//遍历1-1e7+5数
            {
                ll v = 0 ;
                int pos ;
                for(int j = i ; j < N && j < minv ; j+=i)//成倍数的遍历。
                {
                    if(p[j])//该数出现
                    {
                        if(v==0)//第一个数
                        {
                            v = j ;
                            pos = p[j];
                        }
                        else if(v / i * j < minv)//第二个数出现,且小于原lcm更新。
                        {
                            minv = v / i * j ;
                            flaga = pos ;
                            flagb = p[j];
                        }
                        else
                        {
                            break ;
                        }
                    }
                }
            }
            if(flaga > flagb) swap(flaga , flagb);
            cout << flaga << " " << flagb << endl;
        }
    
        return 0 ;
    }
  • 相关阅读:
    使用Hugo框架搭建博客的过程
    使用Hugo框架搭建博客的过程
    使用Hugo框架搭建博客的过程
    Windows软件包管理工具:Scoop
    Centos8 安装ifconfig(net-tools.x86_64)
    Centos8 重启网卡方法
    使用Visual Studio 2019--调试汇编32位代码的详细步骤
    linux 三剑客之awk总结
    linux 三剑客之sed常用总结
    mysql数据库的笔记
  • 原文地址:https://www.cnblogs.com/nonames/p/11821002.html
Copyright © 2020-2023  润新知