首页 > 编程语言 >【小航的算法日记】最小公倍数

【小航的算法日记】最小公倍数

时间:2022-11-29 10:37:54浏览次数:45  
标签:return 小航 nums 公倍数 最大公约数 int 算法 序列 gcd


目录

  • ​​一、概念​​
  • ​​二、模板​​
  • ​​三、例题​​
  • ​​题:1819. 序列中不同最大公约数的数目​​
  • ​​解:​​

一、概念

【小航的算法日记】最小公倍数_几何学
推导:

由算术基本定理得:
【小航的算法日记】最小公倍数_最大公约数_02【小航的算法日记】最小公倍数_几何学_03则,
【小航的算法日记】最小公倍数_子序列_04【小航的算法日记】最小公倍数_线性代数_05
(1)X (2)得:
【小航的算法日记】最小公倍数_线性代数_06即:
【小航的算法日记】最小公倍数_子序列_07

二、模板

给定两个数 a、b,求它们的最小公倍数。

int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a%b);
}

int lcm(int a, int b) {
return a / gcd(a, b) * b; // 先除法,再乘法,避免溢出;
}

三、例题

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

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

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

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

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

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

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

示例 1:

【小航的算法日记】最小公倍数_线性代数_08

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

示例 2:

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

提示:

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

解:

解题思路:

AC代码:

class Solution {
static int[] f = new int[200001];
public int countDifferentSubsequenceGCDs(int[] nums) {
int max = Integer.MIN_VALUE;
int res = 0;
for(int num : nums){
f[num] ++;
max = (int)(Math.max(num, max));
res ++;
}

for(int i = 1; i <= max; i ++) {
if(f[i] != 0) continue;
// 枚举该数是否为里面两数的因子,保证因子不一样
int g = 0;
for(int j = i; j <= max; j += i) {
if(f[j] != 0) {
g = gcd(j, g);
if(g == i) break;
}
}
if(g == i) res ++;
}
return res;

}
// 辗转相除法获得最大公约数
public int gcd(int a, int b) {
return b == 0 ? a : gcd(b, a%b);
}
}


标签:return,小航,nums,公倍数,最大公约数,int,算法,序列,gcd
From: https://blog.51cto.com/u_15895329/5894198

相关文章

  • 【小航的算法日记】变量交换算法
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:面试题16.01.交换数字​​​​解:​​​​题:面试题05.07.配对交换​​​​解:​​内容摘自英雄哥,详情请看......
  • 【小航的算法日记】线性枚举(二) - 统计法入门
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:1550.存在连续三个奇数的数组​​​​解:​​​​题:1295.统计位数为偶数的数字​​​​解:​​​​题:540.有......
  • 【小航的算法日记】进制转换(二) - 进阶
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:202.快乐数​​​​解:​​​​题:168.Excel表列名称​​​​解:​​​​题:171.Excel表列序号​​​​解:​​......
  • 【小航的算法日记】进制转换(一) - 入门
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:剑指Offer15.二进制中1的个数​​​​解:​​​​题:258.各位相加​​​​解:​​​​题:1290.二进制链表转......
  • 【小航的算法日记】字符串算法(二) - 字符串比较
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:剑指Offer05.替换空格​​​​解:​​​​题:面试题10.05.稀疏数组搜索​​​​解:​​​​题:1763.最长的......
  • 【小航的算法日记】线段树
    本内容取经于:https://leetcode.cn/problems/my-calendar-i/solution/by-lfool-xvpv/一、概念概念区分:线段树解决的是「区间和」的问题,且该「区间」会被修改前缀和解决的是......
  • 【小航的算法日记】字符串
    目录​​一、概念​​​​二、模板​​​​三、例题​​​​题:344.反转字符串​​​​解:​​​​题:541.反转字符串II​​​​解:​​​​题:剑指Offer05.替换空格​​​......
  • 【小航的算法日记】哈希
    一、概念哈希表、哈希函数、哈希碰撞二、模板三、例题题:242.有效的字母异位词给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。注意:若s和t中每个......
  • 【小航的算法日记】图论
    目录​​一、概念、模板​​​​存图方式:​​​​1.邻接矩阵​​​​2.邻接表​​​​3.类​​​​算法:​​​​拓扑排序:​​​​最短路问题:​​​​1.Floyd「多源汇最短路......
  • 算法面试点汇总
    算法面试点汇总我们会在这里介绍我所涉及到的算法相关的面试点内容,本篇内容持续更新我们会介绍下述算法的相关面试点:二分查找冒泡排序选择排序插入排序快速排序......