代码编织梦想

题目描述

给定 𝑛n 个正整数𝑎1,𝑎2,...,𝑎𝑛a1​,a2​,...,an​,你可以至多修改其中一个数字,使这 𝑛n 个数字的最大公约数尽可能的大。

请问修改后可能的最大公约数的值。

输入格式

输入共两行,
第一行:一个正整数 𝑛n
第二行:𝑛n 个正整数 𝑎1,𝑎2,...,𝑎𝑛a1​,a2​,...,an​

输出格式

输出至多修改一个数字的情况下,可能达到的最大公约数的值

数据范围
  • 30%30% 的数据,1≤𝑛≤1031≤n≤103
  • 60%60% 的数据,1≤𝑛≤1041≤n≤104
  • 100%100% 的数据,1≤𝑛,≤1051≤n,≤105 ,1≤𝑎𝑖≤1091≤ai​≤109
样例数据

输入:

3
24 28 36

输出:

12

说明:

修改28,改成12即可

输入:

3
10 10 10

输出:

10

详见代码:

#include<bits/stdc++.h>
using namespace std;
int n;
int a[100005];
int q[100005];
int h[100005];
int gcd(int x,int y){
    if(x%y==0) return y;
    return gcd(y,x%y);
}
int main() {
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    q[1]=a[1];
    for(int i=2;i<=n;i++){
        q[i]=gcd(q[i-1],a[i]);
    }
    h[n]=a[n];
    for(int i=n-1;i>=1;i--){
        h[i]=gcd(h[i+1],a[i]);
    }
    int ans=max(h[2],q[n-1]);
    for(int i=2;i<n;i++){
        ans=max(ans,gcd(q[i-1],h[i+1]));
    }
    cout<<ans;

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

上海市计算机学会竞赛平台2023年3月月赛乙组t1-3-爱代码爱编程

T1 卡片游戏 题目描述 小爱拿到了n张卡片,每张卡片的正反面均写有一个数字,其中第ii张卡片的正面的数字为 a

上海市计算机学会竞赛平台2022年11月月赛乙组 总结_上海市计算机学会竞赛平台 乙组-爱代码爱编程

https://iai.sh.cn/contest/44 3h. 第一次提交:320pts。比赛结束前:400pts。 比赛期间 第一次提交 先把四道题都读了一遍,感觉这次比较简单。顺着做吧。 此时3min。 T1 数

上海市计算机学会竞赛平台 yacs 2023年7月月赛 乙组 订单安排_yacs 2023年7月月赛 乙组 订单安排c++-爱代码爱编程

题目:        订单安排         题目描述         小爱收到了 n 笔订单,她每笔订单的完成时间是 1 分钟,按原计划,第 i 笔订单原本的完成处理时间是第 i 分钟。         由于在开始的前 m 分钟发生了网络故障,没有办法进行任何订单处理,打乱了原有的计划。每个顾客都会因为订单延迟完成而不悦,已知第 i 笔订单的顾

【力扣一轮】数组-爱代码爱编程

旋转矩阵 题目链接 随想录链接 旋转的方式把数字一个接一个写入矩阵中。 这时需要用到循环不变量,它是一个循环,每次处理的时候需要处理的方式是一样的,而不是有着条件的限制。 对于这道题,循环不变量就是边元素的处理,只

嵌入式学习第三十五天!(算法)-爱代码爱编程

算法:解决特定问题求解步骤 1. 算法的设计:     1. 正确性:语法正确;合法的输入能得到合理的结果;对非法的输入,给出满足要求的规格说明;对精心选择,甚至刁难的测试都能正常运行,结果正确;     2. 可读性:便于交流,阅读,理解(高内聚,低耦合);     3. 健壮性:输入非法数据,能进行相应的处理,而不是产生异常;     4.

c语言笔记14-爱代码爱编程

指针1         在C语言中给内存单元的编号起了个名字叫做指针,通俗来说就是地址。(内存单元编号=地址=指针) 1.指针变量与地址 int a=10;  int* p=&a;   *  说明了这里p的是指针变量;int*说明p是一个整形指针;int说明p指向的对象a是一个整形;&a是取出a的地址; 总的来说就是取出a的地址存

atcoder beginner contest 353-爱代码爱编程

A int n, a[1000]; void solve(){ cin >> n; for(int i = 1; i <= n; i ++){ cin >>