题意:

给出nnn个数字,从nnn个数字中选两个,使其lcmlcmlcm最大,输出选的两个数字的编号。(2≤n≤106,1≤ai≤107)(2\leq n\leq 10^6,1\leq a_i\leq 10^7)(2≤n≤106,1≤ai​≤107)


思路:

lcm(a,b)=a∗bgcd(a,b)lcm(a,b)=\frac{a*b}{gcd(a,b)}lcm(a,b)=gcd(a,b)a∗b​,因此最直接的想法就是枚举gcdgcdgcd,找到最小的两个aaa、bbb,然后更新答案。

然后算一下复杂度,枚举gcdgcdgcd,找所有gcdgcdgcd的倍数,类似于埃氏筛。最坏情况下,复杂度为n+n2+n3+n4...+1n+\frac{n}{2}+\frac{n}{3}+\frac{n}{4}...+1n+2n​+3n​+4n​...+1,取出nnn之后,剩下部分为调和级数,即1+12+13+...+1n=lnn1+\frac{1}{2}+\frac{1}{3}+...+\frac{1}{n}=lnn1+21​+31​+...+n1​=lnn,因此最坏复杂度为 O(nlnn)O(nlnn)O(nlnn) 近似为 O(nlogn)O(nlogn)O(nlogn),可以通过此题。


反思:

比赛时,已经想到了枚举gcdgcdgcd,但是当时觉得枚举gcdgcdgcd,找到最近的两个数,但这两个数的gcdgcdgcd不一定就是当前枚举的gcdgcdgcd,然后就认为不能保证正确性…赛后才反映过来,我枚举了所有的gcdgcdgcd,所以一定能枚举到正解…哭了…

还是考虑的不周全,继续努力吧!


代码:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#define __ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define rep(i,a,b) for(ll i = a; i <= b; i++)
#define LOG1(x1,x2) cout << x1 << ": " << x2 << endl;
#define LOG2(x1,x2,y1,y2) cout << x1 << ": " << x2 << " , " << y1 << ": " << y2 << endl;
#define LOG3(x1,x2,y1,y2,z1,z2) cout << x1 << ": " << x2 << " , " << y1 << ": " << y2 << " , " << z1 << ": " << z2 << endl;
typedef long long ll;
typedef double db;
const int N = 1e6+100;
const int M = 1e7+100;
const db EPS = 1e-9;
using namespace std;ll sum,ans1,ans2,a[N],n,mp[M];
pair<ll,int> num[N];int main()
{scanf("%lld",&n);rep(i,(ll)1,n){scanf("%lld",&a[i]);mp[a[i]]++; num[i] = make_pair(a[i],i);}sum = 1e17;rep(i,1,(ll)1e7){ll a1 = -1, a2 = -1;for(ll j = i; j <= (ll)1e7; j+=i){if(a1 != -1){if(mp[j]) {a2 = j; break;}}else{if(mp[j] >= 2) {a1 = a2 = j; break;}else if(mp[j] == 1) a1 = j;}}if(a1!=-1 && a2!=-1 && a1*a2/(ll)i < sum){sum = a1*a2/i;ans1 = a1, ans2 = a2;}}sort(num+1,num+1+n);int xx = lower_bound(num+1,num+1+n,make_pair(ans1,0))-num;int yy = lower_bound(num+1,num+1+n,make_pair(ans2,0))-num;if(num[xx].second > num[yy].second) swap(xx,yy);if(xx==yy)yy++;printf("%d %d\n",num[xx].second,num[yy].second);return 0;
}

【 Codeforces Round #552 (Div. 3) G】Minimum Possible LCM【埃氏筛】相关推荐

  1. Codeforces Round #644 (Div. 3) G.A/B Matrix

    Codeforces Round #644 (Div. 3) G.A/B Matrix 题目链接 You are given four positive integers n, m, a, b (1≤ ...

  2. Codeforces Round #731 (Div. 3) G. How Many Paths? dfs + 拓扑 + 思维

    传送门 题意: 给你一张nnn个点mmm条边的图,让你对每个点确定一个编号,规则如下: (1)(1)(1) 对于不能到的点编号为000. (2)(2)(2) 对于只有一条路径能到这个点的点编号为111 ...

  3. Codeforces Round #592 (Div. 2) G. Running in Pairs 构造(水)

    传送门 文章目录 题意: 思路: 题意: 思路: 史上最水GGG题,没有之一. 考虑最小的情况如何构造,显然就是让a,ba,ba,b都1−n1-n1−n依次排列即可,这样的最小值为n∗(n+1)2\f ...

  4. Codeforces Round #725 (Div. 3) G. Gift Set 二分

    传送门 文章目录 题意: 思路: 题意: 有两种物品分别有x,yx,yx,y个,每次可以从一个拿出aaa个,另一个拿出bbb个分成一组,问最多能分成多少组. 思路: 这个题有一个显然的单调性,所以二分 ...

  5. Codeforces Round #552 (Div. 3) A B C D E F G (暴力,dp,模拟)

    题目链接:https://codeforces.com/contest/1154 A:Restoring Three Numbers B:Make Them Equal C:Gourmet Cat D ...

  6. Codeforces Round #552 (Div. 3) E stl模拟 F dp G gcd

    contest链接 https://codeforces.com/contest/1154 E 题解思路 直接哈希模拟删除T了,可以用setsetset和lowerlowerlower_boundbo ...

  7. Codeforces Round #827 (Div. 4) G. Orray

    Problem - G - Codeforces 题意: 给定一个数列,让你重新排列这个数列,使得其前缀或最大 思路: 贪心策略就是找一个与pre或起来最大的值 重点是怎么写呢 感觉div4的题思路都 ...

  8. Codeforces Round #827 (Div. 4) G. Orray 解题报告

    原题链接: Problem - G - Codeforces 题目描述: You are given an array aa consisting of nn nonnegative integers ...

  9. Codeforces Round #693 (Div. 3)G. Moving to the Capital

    题目链接:Problem - G - Codeforces 题目大意:给定一张n个节点m条边的图,定义d数组为每个结点到结点1的距离. 每次可以选择两个操作:1,跳到结点x,dx>d当前 2.跳 ...

  10. Codeforces Round #552 (Div. 3)D、E题解

    D. Walking Robot 题意 机器人在一维坐标轴上从0走到x,中途可以在有光的地方可以选择给太阳能电池充电,每次移动都要消耗一单位电,蓄电池容量为a,太阳能电池容量为b,一开始都是满电,问机 ...

最新文章

  1. 图解Sqlite教程2
  2. 【KVM系列07】使用 libvirt 做 QEMU/KVM 快照和 Nova 实例的快照
  3. python同时兼容2和3的几个技巧
  4. 浏览器渲染流水线解析
  5. Redis-相关概念记录
  6. 04-图像的形状绘制
  7. startsBBS在nginx环境下的部署,出现布局错误和验证码不能显示的解决方法
  8. 架构初识之 —— 使用kafka进行商品维度化缓存解决方案
  9. 错过了秋天的第一杯奶茶,不要错过秋天第一场黑客松
  10. 知乎热问:一个程序员的水平能差到什么程度?
  11. Word样式窗格、模板格式
  12. 直播app源代码 直播软件开发的iOS直播推流之h264/aac 硬编码
  13. matlab求状态方程的解,Matlab问题状态方程的解.ppt
  14. 钢琴五线谱 学习分享(兴趣爱好)
  15. python爬虫从企查查获取企业信息-手工绕开企查查的登录验证
  16. 用PV操作写出一个不会出现死锁的哲学家进餐问题
  17. Android自定义view之网易云推荐歌单界面
  18. Opencv C++成长之路(七):RGB转换灰度图像
  19. Arduino基础之十一 74HC595的使用------控制1位数码管
  20. 7-3 sdut-C语言实验- 对称矩阵的判定

热门文章

  1. Oracle 相关知识点结构图
  2. .NET 2.0 的压缩功能
  3. apache log分析
  4. StoreOnce的未来:惠普是否能真正实现一体化去重
  5. mysql truncate 日期_(LINQ to Entities)使用日期判断条件Truncate日期函数
  6. 小猿圈python_小猿圈python之内置方法new
  7. 关于python编程语法_Python编程入门——基础语法详解
  8. stringbuilder 拼接语句缺失右括号_C++编程基础: 6. 语句、表达式和运算符
  9. C程序设计--VC++6.0的使用(常用快捷键)
  10. python logger.debug_python处理logger日志