2172. 最大公约数

news2024/11/18 11:50:31

Powered by:NEFU AB-IN

Link

文章目录

  • 2172. 最大公约数
    • 题意
    • 思路
    • 代码

2022年第十三届决赛真题

2172. 最大公约数

  • 题意

    给定一个数组, 每次操作可以选择数组中任意两个相邻的元素 x , y x, yx,y 并将其 中的一个元素替换为 gcd ⁡ ( x , y ) \operatorname{gcd}(x, y)gcd(x,y), 其中 gcd ⁡ ( x , y ) \operatorname{gcd}(x, y)gcd(x,y) 表示 x xx 和 y yy 的最大公约数。 请问最少需要多少次操作才能让整个数组只含 1 。

  • 思路

    流程图如下
    img
    其中两个互质元素的最短距离,可以这么求:

    • 首先,目的就是为了让数组中变出一个1,而题目中只让相邻gcd,所以两个互质的不能直接gcd
    • 所以我们要进行区间gcd,找到最短长度的区间,使得gcd=1
      • 如abcde,a与e互质,其实相当于a或e中无一个质因子相同,所以也就是a和b进行gcd,然后b肯定会带上a的因子,否则b就是1,然后一直到e
    • 可以采用二分双指针,找最短长度区间
    • 可以采用st表线段树,求区间gcd
  • 代码

    '''
    Author: NEFU AB-IN
    Date: 2023-05-24 12:47:50
    FilePath: \LanQiao\2172\2172.py
    LastEditTime: 2023-05-24 14:52:22
    '''
    # import
    from sys import setrecursionlimit, stdin, stdout, exit
    from collections import Counter, deque
    from heapq import heapify, heappop, heappush, nlargest, nsmallest
    from bisect import bisect_left, bisect_right
    from datetime import datetime, timedelta
    from string import ascii_lowercase, ascii_uppercase
    from math import log, gcd, sqrt, fabs, ceil, floor
    
    
    class sa:
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
        def __lt__(self, a):
            return self.x < a.x
    
    
    # Final
    N = int(1e5 + 10)
    M = 20
    INF = int(2e9)
    
    # Define
    setrecursionlimit(INF)
    input = lambda: stdin.readline().rstrip("\r\n")  # Remove when Mutiple data
    read = lambda: map(int, input().split())
    LTN = lambda x: ord(x.upper()) - 65  # A -> 0
    NTL = lambda x: ascii_uppercase[x]  # 0 -> A
    
    # —————————————————————Division line ——————————————————————
    a = [0] * N
    dp = [[0] * M for _ in range(N)]
    Log = [0] * N
    
    
    def init():
        for j in range(M):
            i = 1
            while i + (1 << j) - 1 <= n:
                if j == 0:
                    dp[i][j] = a[i]
                else:
                    dp[i][j] = gcd(dp[i][j - 1], dp[i + (1 << (j - 1))][j - 1])
                i += 1
        Log[1] = 0
        for i in range(2, N):
            Log[i] = Log[i >> 1] + 1
    
    
    def query(l, r):
        k = Log[r - l + 1]
        return gcd(dp[l][k], dp[r - (1 << k) + 1][k])
    
    
    n, = read()
    a[1:] = read()
    
    init()
    cnt = sum(i == 1 for i in a)
    if cnt > 0:
        print(n - cnt)
        exit(0)
    
    if query(1, n) != 1:
        print(-1)
        exit(0)
    
    ans = INF
    
    for i in range(1, n + 1):
        l, r = i, n
        while l < r:
            mid = (l + r) >> 1
            if query(i, mid) == 1:
                r = mid
            else:
                l = mid + 1
        if query(i, r) == 1:
            ans = min(ans, r - i)
    
    print(ans + n - 1)
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/563295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从月薪5000到月薪20000,自动化测试应该这样学...

绝大多数测试工程师都是从功能测试做起的&#xff0c;工作忙忙碌碌&#xff0c;每天在各种业务需求学习和点点中度过&#xff0c;过了好多年发现自己还只是一个功能测试工程师。 随着移动互联网的发展&#xff0c;从业人员能力的整体进步&#xff0c;软件测试需要具备的能力要…

征稿丨IJCAI‘23大模型论坛,优秀投稿推荐AI Open和JCST发表

第一届LLMIJCAI’23 Symposium征稿中&#xff0c;优秀投稿论文推荐《AI Open》和 《JCST》发表。 大规模语言模型&#xff08;LLMs&#xff09;&#xff0c;如ChatGPT和GPT-4&#xff0c;以其在自然语言理解和生成方面的卓越能力&#xff0c;彻底改变了人工智能领域。 LLMs广泛…

Go语言文件I/O操作

go语言中的io操作主要学习目标 掌握文件的常规操作掌握ioutil包的使用掌握bufio包的使用 在go中使用 FileInfo接口 定义了IO的一些函数 FileInfo接口 源码追溯 //type.go // A FileInfo describes a file and is returned by Stat and Lstat. type FileInfo fs.FileInfo/…

ChatGPT:你真的了解网络安全吗?浅谈攻击防御进行时之传统的网络安全

ChatGPT&#xff1a;你真的了解网络安全吗&#xff1f;浅谈网络安全攻击防御进行时 传统的网络安全总结 ChatGPT&#xff08;全名&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;美国OpenAI 研发的聊天机器人程序&#xff0c;是人工智能技术驱动…

什么是网络安全?如何让小白简单的学习网络安全

一、什么是网络安全 网络安全是一个庞大的学科&#xff0c;如果只是普及网络安全技能是非常枯燥的&#xff0c;所以建议从大众容易接受的网络安全诈骗入手&#xff0c;可以先介绍一下近年来频发的网络安全诈骗案例&#xff0c;钓鱼邮件、中奖短信、冒充公检法等多种诈骗手段&am…

Koala:加州大学BAIR团队使用ChatGPT蒸馏数据和公开数据集微调LLaMA模型得到

自从Meta发布LLaMA以来&#xff0c;围绕它开发的模型与日俱增&#xff0c;比如Alpaca、llama.cpp、ChatLLaMA以及Vicuna等等&#xff0c;相关的博客可以参考如下&#xff1a; 【Alpaca】斯坦福发布了一个由LLaMA 7B微调的模型Alpaca&#xff08;羊驼&#xff09;&#xff0c;训…

SpringBoot+Vue前后端分离项目——订单模块——订单管理页面设计

接口返回数据格式&#xff1a; {"msg": "查询成功","total": 1,"code": 200,"data": [{"orderId": "qwer1234","userId": "1","userName": "admin","ad…

全网最全JAVA面试八股文,终于整理完了,堪称2023最强

当今互联网行业中&#xff0c;Java作为一种广泛应用的编程语言&#xff0c;对于求职者来说仍是一项受欢迎的技能。然而&#xff0c;随着市场上的开发人员数量越来越多&#xff0c;Java面试的竞争也愈加激烈。 目前Java面试有着以下现状&#xff1a; 面试难度加大 与过去相比…

9:00进去,9:05就出来了,这问的也太变态了···

从外包出来&#xff0c;没想到死在另一家厂子了。 自从加入这家公司&#xff0c;每天都在加班&#xff0c;钱倒是给的不少&#xff0c;所以也就忍了。没想到5月一纸通知&#xff0c;所有人不许加班&#xff0c;薪资直降30%&#xff0c;顿时有吃不起饭的赶脚。 好在有个兄弟内推…

第四章 内存管理

4.1 内存的基本知识 4.1.1 知识总览 1、内存的作用&#xff1a; 内存可存放数据。程序执行前需要先放到内存中才能被CPU处理--->缓和CPU与硬盘之前的速度矛盾 2、内存的存放&#xff1a; 内存的存放类似于酒店&#xff0c;给内存的每个存储单元都编号。&#xff08;在多道…

使用柔性数组重写MyString

hello&#xff0c;各位宝子&#xff0c;今天阿崽将使用c和柔性数组的方式重新去写String类 在开始本次知识前&#xff0c;首先给大家介绍下柔性数组这个buff特点&#xff1a; 结构中的柔性数组成员前面至少要包含一个其他成员 sizeof返回的这种结构大小不包括柔性数组的内存 …

不想打工做什么好呢?厌倦打工的不妨试试以下几种赚钱方式

除开一些比较幸运的人&#xff0c;谁不是一边打工养家&#xff0c;一边在找寻好机会&#xff1f;人与人之间本来就存在诸多的不公平。有的人这辈子只能靠打工养家&#xff0c;只有少数人能不靠打工来挣钱养家&#xff0c;但是这极少部分人凭什么是你&#xff1f; 现在社会上&am…

( 数组) 209. 长度最小的子数组——【Leetcode每日一题】

❓209. 长度最小的子数组 难度&#xff1a;中等 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;…

【ArcGIS Pro二次开发】(30):数据定义语言DDL详解

在之前的文章【ArcGIS Pro二次开发】(19)&#xff1a;创建要素类&#xff08;FeatureClass&#xff09;中有涉及DDL的知识点&#xff0c;随着深入的学习&#xff0c;在这里做一个小总结。 一、DDL基本概念 ArcGIS Pro二次开发中的DDL API是一种【数据定义语言】&#xff0c;主…

【Web服务器集群】Web基础与HTTP协议

文章目录 一、Web基础1.域名概述1.1域名的概念1.2域名解析1.3域名空间结构 2.域名注册3.网页的概念4.HTML概述4.1HTML概念4.2HTML文档的结构 5.网页基本标签6.Web概述7.静态网页与动态网页7.1静态网页7.2动态网页7.3动态网页语言 二、HTTP协议1.概念2.HTTP协议的版本3.HTTP方法…

pytest+requests+Python3.7+yaml+Allure+Jenkins+docker实现接口自动化

目录 接口自动化测试框架&#xff08;用例自动生成&#xff09; 项目说明 技术栈 环境部署 框架流程图与目录结构图及相关说明 1、框架流程图如下 2、代码目录结构图如下 关联详解 函数助手详解 代码设计与功能说明 1、定义运行配置文件 runConfig.yml 2、接口配置…

构建系统安全防线!Genmai安全漏洞检测框架全面解析

01 Genmai是什么&#xff1f; Genmai是由openkylin社区SecurityGovernance SIG为了挖掘、检测、验证麒麟产品的安全漏洞而主导开发的一款开源主机漏洞扫描、网络漏洞扫描以及基线扫描的安全扫描框架。其致力于能在短时间内对主流的操作系统进行安全检测&#xff0c;并确保准确…

Unity3D :使用 UXML 实例作为模板

推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 使用 UXML 实例作为模板 您可以将现有 UXML 文档实例化为 UXML 文档中的模板作为模板实例&#xff0c;类似于预制件 在 Unity 中工作。 使用 UXML 文档作为模板 要将项目中的现有…

「API 接口获取方法」

在创建一个应用程序的过程中&#xff0c;获取数据是非常关键的一步。而通过API接口获取数据通常是最好的方式之一。那么&#xff0c;如何通过关键字获取API接口呢&#xff1f;以下是一些步骤&#xff1a; 1.确定你需要获取的数据类型 首先&#xff0c;你需要确定你需要获取的…

深入浅出 SQL Server CDC 数据同步

简介 SQL Server 是一款老牌关系型数据库,自 1988 年由 Microsoft、Sybase 和 Ashton-Tate 三家公司共同推出&#xff0c;不断迭代更新至今&#xff0c;拥有相当广泛的用户群体。 如今&#xff0c;我们提到 SQL Server 通常指 Microsoft SQL Server 2000 之后的版本。 SQL S…