zoukankan      html  css  js  c++  java
  • 数论(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 ;
    }
  • 相关阅读:
    分布式系统中的Session问题
    HotSpot VM运行时---命令行选项解析
    K大数查询
    [DarkBZOJ3636] 教义问答手册
    小朋友和二叉树
    [COCI2018-2019#2] Sunčanje
    小SY的梦
    [HDU6722 & 2019百度之星初赛四 T4] 唯一指定树
    [HDU6800] Play osu! on Your Tablet
    [NOI2007] 货币兑换
  • 原文地址:https://www.cnblogs.com/nonames/p/11821002.html
Copyright © 2011-2022 走看看