删除一个数字之后数列gcd最大
★实验任务
顾名思义,互质序列是满足序列元素的 gcd 为 1 的序列。比如[1,2,3], [4,7,8],都是互质序列。[3,6,9]不是互质序列。现在并不要求你找出一个互质 序列,那样太简单了!真正的问题描述是:给定一个序列,删除其中一个元素使 得剩下元素的 gcd 最大,输出这个 gcd。
★数据输入
输入第一行为一个正整数 n。第二行为 n 个正整数 ai(1<=ai<=10^9)。 80%的数据 2<=n<=1000. 100%的数据 2<=n<=100000.
★数据输出
输出一个正整数,表示最大的 gcd。
测试样例
输入:
3
1 1 1
输出:
1
解题思路:显然通过暴力是会超时,删除一个数那我们就要将这个数组每个数都遍历一遍,但是在这个过程中肯定会有喝多重复的计算一些书的gcd过程,所以对这些重复计算的过程进行优化才能解出。用两个数组进行从前往后的每个数之前的所有数的gcd和从后往前的每个数之后的所有数的gcd存储,然后整个过程就简单多了。
代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;
int a[100005], qian[100005], hou[100005];
int gcd(int a, int b)
{
if (a < b) { int tmp = a; a = b; b = tmp; }
int tmp;
while (b != 0)
{
tmp = b; b = a%b; a = tmp;
}
return a;
}
int Max(int a, int b)
{
return a > b ? a : b;
}
int main()
{
int n, i, j;
cin >> n;
for (i = 0; i < n; i++)cin >> a[i];
qian[0] = a[0]; hou[n-1] = a[n - 1];
for (i = 1; i < n; i++)qian[i] = gcd(qian[i - 1], a[i]);
for (i = n - 2; i >= 0; i--)hou[i] = gcd(hou[i + 1], a[i]);
int max = qian[n - 1];
for (i = 0; i < n; i++)
{
if (i == 0)max = Max(max, hou[1]);
else if (i == n - 1)max = Max(max, qian[n - 2]);
else max = Max(max, gcd(qian[i - 1], hou[i + 1]));
}
cout << max << endl;
return 0;
}
删除一个数字之后数列gcd最大的更多相关文章
- 42.输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S, 如果有多对数字的和等于S,输出两个数的乘积最小的。
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S, 如果有多对数字的和等于S,输出两个数的乘积最小的. 这道题有很多烟雾弹: 首先如果有多对,最前面的两个数就是乘积最小的, ...
- 一个数字键盘引发的血案——移动端H5输入框、光标、数字键盘全假套件实现
https://juejin.im/post/5a44c5eef265da432d2868f6 为啥要写假键盘? 还是输入框.光标全假的假键盘? 手机自带的不用非得写个假的,吃饱没事干吧? 装逼?炫技 ...
- Elasticsearch索引的操作,利用kibana 创建/删除一个es的索引及mapping映射
索引的创建及删除 1. 通过索引一篇文档创建了一个新的索引 .这个索引采用的是默认的配置,新的字段通过动态映射的方式被添加到类型映射. 利用Kibana提供的DevTools来执行命令,要创建一个索引 ...
- C++ 删除一个字符串中的指定字符
Q:一个数字是以xxx,yyy,zzz的字符串形式存储的,将逗号消去并转化为整数输出 方法一:char数组,即定义时s1定义为 char s1[20]的形式: //删除输入字符串中的逗号,并构建新串 ...
- Entity Framework 6 Recipes 2nd Edition(9-5)译->删除一个断开的实体
9-5. 删除一个断开的实体 问题 我们要把一个把WCF上取回的对象做上删除的标志. 解决方案 假设我们有如Figure 9-5所示实体的支付与票据的模型. Figure 9-5. 一个支付与票据的模 ...
- github如何删除一个(repository)仓库
GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub.作为开源代码库以及版本控制系统,Github拥有140多万开发者用户.随着越 ...
- Java实现点击一个控件实现删除一个控件的方法
最近在做项目的时候需要处理点击一个JLabel实现删除这一个JLabel的功能.最近折磨了一点时间,查了一下API.找到2个方法可以实现这个功能. remove public void remove( ...
- hadoop 集群 加入一个新的存储节点和删除一个计算节点需要刷新集群状态命令
加入一个新的存储节点和删除一个计算节点需要刷新集群状态命令 方式1:静态添加datanode,停止namenode方式 1.停止namenode 2.修改slaves文件,并更新到各个节点3.启动na ...
- JS:操作样式表2 :用JS实现添加和删除一个类名的功能(addClass()和removeClass())
var box = document.getElementById("box"); box.id = "pox"; 将id = “box”,改为id = “po ...
随机推荐
- WebLogic远程命令执行
靶机说明 目标ip:172.16.53.28(window 2003) 本靶机所针对的序列化漏洞系列以及常见安全问题如下: 弱口令登陆控制台部署war包webshell CVE-2018-2893 C ...
- golang cgo 使用总结
原文地址 CGO 提供了 golang 和 C 语言相互调用的机制.某些第三方库可能只有 C/C++ 的实现,完全用纯 golang 的实现可能工程浩大,这时候 CGO 就派上用场了.可以通 CGO ...
- Java线程和多线程(十四)——Synchronized关键字解析
曾经有一个比较有趣的面试问题,那就是,关于使用synchronized关键字,是用在方法上面尾号,还是用在一个代码块上面为好? 答案就是使用锁定代码块为更好.因为这样不会锁定对象.当synchroni ...
- [COGS257]动态排名系统 树状数组套主席树
257. 动态排名系统 时间限制:5 s 内存限制:512 MB [问题描述]给定一个长度为N的已知序列A[i](1<=i<=N),要求维护这个序列,能够支持以下两种操作:1.查询A[ ...
- [SCOI2010]传送带 三分法
[SCOI2010]传送带 LG传送门 三分法模板. 关于为什么可以三分,我选择感性理解,有人证明了,总之我是懒得证了. 假设路径是\(A \to E \to F \to D\),\(E\)和\(F\ ...
- Package设计1:选择数据类型、暂存数据和并发
SSIS 设计系列: Package设计1:选择数据类型.暂存数据和并发 Package设计2:增量更新 Package 设计3:数据源的提取和使用暂存 一,数据类型的选择 对于SSIS的数据类型,容 ...
- 使用VS Code新建编译Flutter项目
本文的前提是你已经安装好了VS Code,并且安装了Flutter和Dart扩展插件. 1. 新建Flutter项目 查看——命令面板,或者Ctrl + Shift + P 输入 Flutter: N ...
- mtr语言真是逆天了
实践证明,设计一个语言,还不是简单的解释没一行哦
- C# 其他的Url 文件的路径转化为二进制流
//将虚拟路径转化为文件的路径然后最后转化为文件流 public ActionResult SaveImage(string path) { var url =System.Web.HttpConte ...
- JAVA的关键特性
Java团队对设计Java时的关键考虑因素进行了总结,关键特性包含以下列表: 简单性 安全性 可移植性 面向对象 健壮性 多线程 体系结构中立 解释执行 高性能 分布式 动态性 简单性 Java的设计 ...