删除一个数字之后数列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 ...
随机推荐
- WPF RichTextBox 自定义文字转超链接
搬运自StackOverflow private void AddHyperlinkText(string linkURL, string linkName, string TextBeforeLin ...
- temp-2017-4-20
------- p{font-size:20px;color:red;} uuuuuuuuuuu package com.wgscd.gwang.myapplication; /** Created ...
- 20155236范晨歌_EXP3免杀原理与实践
20155236范晨歌_免杀原理与实践 免杀 概述 免杀,也就是反病毒(AntiVirus)与反间谍(AntiSpyware)的对立面,英文为Anti-AntiVirus(简写Virus AV),逐字 ...
- vue中使用定时器时this指向问题
在写一个很小的demo时,用的普通函数写法,没有用es6箭头函数,发现this变化了,后来查找到了问题所在: 箭头函数中的this指向是固定不变(定义函数时的指向),在vue中指向vue 普通函数中的 ...
- 最新版CocoaPods的安装和使用以及版本升级遇到的问题
CocoaPods的下载及安装 mac系统已经默认安装好Ruby环境,如果你不确定自己系统中是否有Ruby的,可以在终端中输入命令行:ruby -v查看当前ruby版本.如图: 确定以后,接下来就可 ...
- Wannafly挑战赛18B 随机数
Wannafly挑战赛18B 随机数 设\(f_i\)表示生成\(i\)个数有奇数个1的概率. 那么显而易见的递推式:\(f_i=p(1-f_{i-1})+(1-p)f_{i-1}=(1-2p)f_{ ...
- noip2017普及题解
https://www.luogu.org/problemnew/show/3954 https://www.luogu.org/problemnew/show/3955 https://www.lu ...
- virtualenvwrapper安装和常用指令(mac)
安装: .安装(要有python环境+pip): * sudo pip install virtualenvwrapper .配置: 执行:vi ~/.bash_profile 在~/.bash_pr ...
- How to access business objects with their related ObjectSpaces (Multi-Database Environment)
https://www.devexpress.com/Support/Center/Question/Details/T565897/how-to-access-business-objects-wi ...
- [转载]在Windows下为PHP5.6安装redis扩展和memcached扩展
一.php安装redis扩展 1.使用phpinfo()函数查看PHP的版本信息,这会决定扩展文件版本 2.根据PHP版本号,编译器版本号和CPU架构, 选择php_redis-2.2 ...