调和级数枚举,LeetCode 1819. 序列中不同最大公约数的数目

一、题目

1、题目描述

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

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

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

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

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

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

2、输入输出

2.1输入
  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 2 * 105
2.2输出

def countDifferentSubsequenceGCDs(self, nums: List[int]) -> int:

3、原题链接

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


二、解题报告

1、思路分析

考虑我们只关注gcd的数目

如果存在某个序列的gcd为x,那么原序列中所有x的倍数组成的序列的gcd一定是x,因为数字越多,gcd越小

那么我们枚举gcd,然后枚举其倍数,只要发现gcd成为我们枚举的数字就答案加1

要进行N(N / 1 + N / 2 + N /3 + ...) = N ln N 次

2、复杂度

时间复杂度: O(N lnN )空间复杂度:O(n)

3、代码详解

复制代码
 ​
python 复制代码
class Solution:
    def countDifferentSubsequenceGCDs(self, nums: List[int]) -> int:
        st = set(nums)
        ma = max(nums)
        res = len(st)
        for i in range(1, ma // 3 + 1):
            if i in st:
                continue
            g = 0
            for j in range(i * 2, ma + 1, i):
                if j in st:
                    g = gcd(g, j)
                    if g == i:
                        res += 1
                        break
        return res
相关推荐
葫三生4 小时前
存在之思:三生原理与现象学对话可能?
数据库·人工智能·神经网络·算法·区块链
Evand J4 小时前
【MATLAB例程】无人机三维路径规划|A*,RRT(快速随机树算法), APF(人工势场法)算法对比|可自定义起终点、障碍物坐标。附下载链接
算法·matlab·无人机·astar·路径规划·rrt·apf
少许极端4 小时前
算法奇妙屋(二十七)-全排列与子集问题
算法·剪枝·回溯·递归
sali-tec4 小时前
C# 基于OpenCv的视觉工作流-章20-仿射变换
图像处理·人工智能·opencv·算法·计算机视觉
u0109272715 小时前
实时数据流处理
开发语言·c++·算法
独自破碎E5 小时前
【滑动窗口+计数】LCR015找到字符串中所有字母异位词
数据结构·算法
Trouvaille ~5 小时前
【Linux】线程同步与互斥(一):线程互斥原理与mutex详解
linux·运维·服务器·c++·算法·线程·互斥锁
2501_940315265 小时前
leetcode统计一致字符串的数目(哈希表)
算法·哈希算法·散列表
清铎5 小时前
项目_Agent实战
开发语言·人工智能·深度学习·算法·机器学习
J_liaty5 小时前
SpringBoot 自定义注解实现接口加解密:一套完整的多算法方案
java·spring boot·算法