【1819. 序列中不同最大公约数的数目】

news/2025/2/13 10:53:44/

来源:力扣(LeetCode)

描述:

给你一个由正整数组成的数组 nums

数字序列的 最大公约数 定义为序列中所有整数的共有约数中的最大整数。

  • 例如,序列 [4,6,16] 的最大公约数是 2 。

数组的一个 子序列 本质是一个序列,可以通过删除数组中的某些元素(或者不删除)得到。

  • 例如,[2,5,10][1,2,1,2,4,1,5,10] 的一个子序列。

计算并返回 nums 的所有 非空 子序列中 不同 最大公约数的 数目

示例 1:
1

输入:nums = [6,10,3]
输出:5
解释:上图显示了所有的非空子序列与各自的最大公约数。
不同的最大公约数为 610321

示例 2:

输入:nums = [5,15,40,5,6]
输出:7

提示:

  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 2 * 105

方法:枚举

思路与算法

  题目要求找到所有非空子序列中不同的最大公约数的数目,我们可以尝试枚举所有的可能的最大公约数。假设 p 为一个序列 A = [ a0, a1 , ⋯, ak ] 的最大公约数,令 ai = c i × p,则序列即为 A = [c0 × p, c1 × p, c2 × p, ⋯, ck × p],根据最大公约数的性质可知此时 gcd(a0, a1 , a2 , ⋯, ak) = p,则可以推出 gcd(c0, c1, c2, ⋯, ck) = 1。此时我们在序列 A 中添加 p 的任意倍数 ak+1 = ck+1 × p 时,则序列 A 的最大公约数依然为 p,即此时 gcd(a0, a1 , a2 , ⋯, ak, ak+1) = p。

  根据以上推论我们可以得出结论,如果 x 为数组 nums 中的某个序列的最大公约数,则数组中所有能够被 x 整除的元素构成的最大公约数一定为 x。根据上述结论,我们可以枚举所有可能的最大公约数 x,其中 x ∈ [1, max(nums)],然后对数组中所有可以整除 x 的元素求最大公约数,判断最后求出的最大公约数是否等于 x 即可。

代码:

class Solution {
public:int countDifferentSubsequenceGCDs(vector<int>& nums) {int maxVal = *max_element(nums.begin(), nums.end());vector<bool> occured(maxVal + 1, false);for (int num : nums) {occured[num] = true;}int ans = 0;for (int i = 1; i <= maxVal; i++) {int subGcd = 0;for (int j = i; j <= maxVal; j += i) {if (occured[j]) {if (subGcd == 0) {subGcd = j;} else {subGcd = __gcd(subGcd, j);}if (subGcd == i) {ans++;break;}}}}return ans;}
};

执行用时:200 ms, 在所有 C++ 提交中击败了84.16%的用户
内存消耗:70.3 MB, 在所有 C++ 提交中击败了42.57%的用户
复杂度分析
时间复杂度:O(n+max(nums)log(max(nums)))。
空间复杂度:O(max(nums))。
author:LeetCode-Solution


http://www.ppmy.cn/news/12090.html

相关文章

Java注解详解

什么是注解 ​ 用一个词就可以描述注解&#xff0c;那就是元数据&#xff0c;即一种描述数据的数据。所以&#xff0c;可以说注解就是源代码的元数据 元注解 JDK1.5之后内部提供的注解&#xff1a; Deprecated 意思是“废弃的&#xff0c;过时的”Override 意思是“重写、覆…

Latex-表格和图片

双栏排版表格跨栏加*号\begin{table*}...\end{table*}表格整体尺寸修改\resizebox{列宽}{行高}{...}列宽、行高可以为数值&#xff08;如50mm&#xff09;&#xff0c;也可以根据文字调整&#xff08;如\textwidth指自适应文字宽度&#xff09;表格内文字居中\begin{tabular}{c…

联合证券|五定增项目同日被否 保荐机构该不该“背锅”?

一天之内5家上市公司定增一起被拒&#xff0c;这一音讯瞬间引发商场重视。 1月11日&#xff0c;浙江世宝、铭普光磁、胜华新材、日辰股份、振华科技等5家上市公司一起公告称&#xff0c;定增不被证监会受理&#xff0c;理由均是证监会以为请求资料不符合法定方式。 投行业界人…

【突变检验方法】合集

突变检验方法合集1 Pettitt突变检验2 贝叶斯突变检测3 有序聚类法4 Buishand U test突变点检测5 SNHT突变点检测6 滑动秩和法参考水文循环系统对变化环境的响应不仅表现在某些气象水文变量的观测系列出现显著的趋势性&#xff0c;还体现在某个时刻起了突然变化&#xff0c;该发…

C语言 全排列(包含错误代码及分析,memset简单介绍及举例)

正确代码&#xff1a;#include <stdio.h> #include <math.h> #include <string.h>int n;//表示位数 int a[10]; int hash_tabel[10];void print() {for(int in;i>0;i--)printf("%d",a[i]);printf("\n"); } void core(int d) {if(d0)/…

session利用的小思路

session利用的小思路 前言 做题的时候经常考到session利用&#xff0c;常见的基本就两种&#xff0c;session文件包含和session反序列化&#xff0c;之前没有详细总结过&#xff0c;就写写吧。 session文件包含 php.ini session的相关配置 session.upload_progress.enabl…

基于汽车知识图谱的汽车问答多轮对话系统 详细教程

结果: 1 技术路线 该技术路线主要将KBQA分为三部分,实体识别与实体链接,关系识别,sparql查询,其中每个部分分为一到多种方法实现。具体的处理流程图如下:

2023年零基础想学大数据?别急!先搞清这一点

◆ 首先学会百度与Google 不论遇到什么问题&#xff0c;先试试搜索并自己解决。 Google首选&#xff0c;翻不过去的&#xff0c;就用百度吧。 大数据知识点&#xff1a; ​ 编辑切换为居中 从传统关系型数据库入手&#xff0c;掌握数据迁移工具、BI数据可视化工具、SQL&am…