cf 1154G Minimum Possible LCM_m. minimum lcm cf-程序员宅基地

技术标签: 巧妙暴力  

...这题关键在他的a[i]<=1e7

那么我们知道lcm(a,b)=a*b/gcd(a,b);

那么我们只要枚举每一个因数d,不管他是不是gcd

然后找出能被这个d整除的最小的两个数字a,b

那么对于这个因数d,tmp=a*b/d,ans=min(ans,tmp)

由于我们枚举了1-1e7所有的质因子,所以就算a*b/d不是lcm,但之后总会枚举到a*b/gcd(a,b)

而使用桶来装数字并查找d的倍数的的最小两个,复杂度为 1e7/d

那么总复杂度就是调和级数和  nlnn ,最后我程序跑出来是1.4s, 而时限是4s

 

#include<bits/stdc++.h>
#define maxl 10000010
using namespace std;

int n,l,r;
int a[maxl];
int num[maxl][2],cnt[maxl];
long long ans;

inline void prework()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		++cnt[a[i]];
		if(cnt[a[i]]==1)
			num[a[i]][0]=i;
		if(cnt[a[i]]==2)
			num[a[i]][1]=i;
	}
}

inline long long gcd(long long a,long long b)
{
	return b==0 ? a:gcd(b,a%b); 
}

inline void mainwork()
{
	ans=1ll*a[1]/gcd(a[1],a[2])*a[2];
	l=1;r=2;int sum,ll,rr;long long tmp;
	for(int d=1;d<maxl;d++)
	{
		sum=0;tmp=1;
		for(int j=d;j<maxl;j+=d)
		{
			if(cnt[j]>=2)
			{
				if(sum==1)
					sum++,rr=num[j][0];
				if(sum==0)
					sum+=2,ll=num[j][0],rr=num[j][1];
			}
			else if(cnt[j]==1)
			{
				sum++;
				if(sum==1) ll=num[j][0];
				if(sum==2) rr=num[j][0];
			}
			if(sum==2)
			{
				tmp=1ll*a[ll]*a[rr]/d;
				if(tmp<ans)
				{
					ans=tmp;
					l=ll;r=rr;
				}
				break;
			}
		}
	}
}

inline void print()
{
	if(l>r) swap(l,r);
	printf("%d %d",l,r);
}

int main()
{
	prework();
	mainwork();
	print();
	return 0;
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/liufengwei1/article/details/89496250

智能推荐

matlab simulink笔记02——延迟模块delay与单位延迟模块unit delay-程序员宅基地

文章浏览阅读3.7w次,点赞9次,收藏64次。延迟模块单位延迟模块延迟模块具有复位功能,当满足复位条件时会进行复位操作,即输出的值会恢复到初始值,而单位延迟模块没有复位功能;延迟模块的步长是可以设置的,而单位延迟模块的步长固定为1,不可以改变..._unit delay

超参数Hyper-parameters的调试方法_hyperparams-程序员宅基地

文章浏览阅读3k次,点赞2次,收藏12次。前言众所周知,机器学习和深度学习工作流中最困难的部分之一,就是为模型找到最好的超参数,机器学习和深度学习模型的性能与超参数直接相关。维基百科上说,“ Hyperparameter optimization 或 tuning 是为学习算法选择一组最优的hyperparameters 的问题”。超参数调优的越好,得到的模型就越好。调优超参数可能是非常乏味和困难的,更像是一门艺术而不是科学。超参数(Hyperparameters)超参数是在建立模型时用于控制算法行为的参数。这些参数不能从常规训练过_hyperparams

Cadence之双击(DSN/brd)文件打开变新建文件的解决方法_如何更改注册表让双击可以启动candence-程序员宅基地

文章浏览阅读4.5k次。注:该文章系转载所得,转载连接:https://www.cnblogs.com/eva0/p/7128068.html。本人亲试方法二、三,均有效,但方法二最为方便快捷,推荐!有时候我们再重新安装Cadence之后,双击打开DNS原理图文件或者brd的PCB文件,发现没有打开对应文件,反而是新建了一个新文件,必须重新取消保存新文件并且从菜单操作打开对应文件,很麻烦我们要解决这个问题,需要修..._如何更改注册表让双击可以启动candence

andriod fragment调用Activity函数方法-程序员宅基地

文章浏览阅读186次。(1)新增一个activity 1 package com.xxxx.activity; 4 5 public interface FragmentCallBack { 7 8 public MainActivity getMainActivity(); 9 10 }(2)在MainActivity 的Java文件中增加g..._android fragment中使用showmsg

[机缘参悟-106] :一个IT人关于爱的理解:智者不入爱河-程序员宅基地

文章浏览阅读321次。然而,正因为情感的短暂性,对于情感的认知和理解需要灵活和细致的观察和分析,不能简单地将情感状态视为恒定的或永久的。然而,需要注意的是,爱情和爱河并非单一的概念,每个人对它们的理解和体验可能有所不同。情感和感情的融合是人类存在的基本特征之一,它们在我们的生活中起着重要的作用。最重要的是,相信自己的直觉和内心的感受。在追求爱情的过程中,保持自我价值和尊严,不断学习和成长,能够帮助我们区分真假爱情,并最终找到真正的幸福。例如,柏拉图的爱的观念认为,真正的爱应该是理性的、追求美善的,并超越个人欲望的。

Linux 下安装pm2后找不到pm2命令解决方法_linux安装pm2后,未找到命令-程序员宅基地

文章浏览阅读1w次,点赞4次,收藏7次。今天安装pm2碰到一个问题,使用npm install pm2 -g安装完成时,找不到pm2命令:在安装提示中可以看到pm2安装位置,此时我们只要使用以下命令将pm2放入系统路径下就可以了:ln -s /home/soft/elk/node-v8.11.3-linux-x64/bin/pm2 /usr/local/bin/..._linux安装pm2后,未找到命令

随便推点

python创建和删除空文件或小文件_python 删除大小为0的文件-程序员宅基地

文章浏览阅读8.8k次。#!/usr/bin/python#-*-coding:utf-8-*- #指定编码格式,python默认unicode编码 import osdirectory = "./dir"os.chdir(directory) #切换到directory目录cwd = os.getcwd() #获取当前目录即dir目录下print("-------------------..._python 删除大小为0的文件

前馈神经网络与反向传播算法-程序员宅基地

文章浏览阅读2.7k次。欢迎关注”生信修炼手册”!在单层感知器的基础上,引入隐藏层即可得到多层感知器和深度神经网络,结构如下在上述网络中,信号从输入层开始,经过线性组合和激活函数的处理,输入到下一层的神经元,信号...

小飞鱼通达二开 OA工作流打印次数统计控制程序(图文)_oa流程批量打印-程序员宅基地

文章浏览阅读629次。每个工作流工作打印了多少次了,在OA里不知道,如何能够控制呢,今天小飞鱼带给大家的就是这个工作量打印次数统计控制程序,使用起来是不是会方便很多。可以查询打印日志明细。打印页面上多了一个打印按钮和流水号、打印次数的信息。 点击打印按钮后,弹出打印预览界面可以进行打印。并且打印按钮消失不能重复进行打印,打印计数进行记录。看图不过瘾,来段视频看一下https://..._oa流程批量打印

C#中struct的字节对齐、转换操作和复制为二进制数据(byte[])_c# struct 数据对齐-程序员宅基地

文章浏览阅读5.1k次。在做C#与其它程序通信的系统时,往往会使用struc操作结构化的数据(如数据包等)。本文简要提出一些使用思路,欢迎各位大牛赐教。 一、STRUCT结构设计当数据的结构确定时,总结为下面两种情况:1、数据长度确定(包括字符串):此时可以直接利用struct来构造数据包,比如: [StructLayout(LayoutKind._c# struct 数据对齐

直播 | AAAI 2021最佳论文:比Transformer更有效的长时间序列预测-程序员宅基地

文章浏览阅读814次。「AI Drive」是由 PaperWeekly 和 biendata 共同发起的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果。我们一直认为,单向地输出知识并不是一个最好的方式,而..._张帅,北航研究生

如何将一个窗口订在桌面上_谷歌钉住插件可以把页面固定在桌面上吗-程序员宅基地

文章浏览阅读3.7k次。 想要让窗口在最上面,在Delphi下很容易实现,把窗口的FormStyle属性设为fsStayOnTop就可以了。但是这样有一个问题,那就是,有一些桌面的小精灵总是会盖不住,如迅雷啊,网际快车啊什么的,这里可以使用Win32 API函数来解决这个问题:SetWindowPos( Handle, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or S_谷歌钉住插件可以把页面固定在桌面上吗

推荐文章

热门文章

相关标签