2022-09-07:给你一个由正整数组成的数组 nums 。
数字序列的 最大公约数 定义为序列中所有整数的共有约数中的最大整数。
例如,序列 [4,6,16] 的最大公约数是 2 。
数组的一个 子序列 本质是一个序列,可以通过删除数组中的某些元素(或者不删除)得到。
例如,[2,5,10] 是 [1,2,1,2,4,1,5,10] 的一个子序列。
计算并返回 nums 的所有 非空 子序列中 不同 最大公约数的 数目 。
输入:nums = [5,15,40,5,6];
输出:7。

答案2022-09-07:

n/1 + n/2 + n/3 + n/4 + … + n/n 收敛于 O(N * logN),N是最大值,当做结论记住。

代码用rust编写。代码如下:

fn main() {let mut arr = vec![5, 15, 40, 5, 6];let ans = count_different_subsequence_gcds(&mut arr);println!("ans = {}", ans);
}const MIN_VALUE: i32 = -1 << 31;// n不是数字的个数,是数组中的最大值
// 体系学习班,
// 根据数据量猜解法,
// 要想通过测试,一定要让计算量不超过10的7次方~10的8次方
// n/1 + n/2 + n/3 + n/4 + ... + n/n -> O(N * logN)
fn count_different_subsequence_gcds(nums: &mut Vec<i32>) -> i32 {// 找到数组中的最大数!maxlet mut max = MIN_VALUE;for num in nums.iter() {max = get_max(max, *num);}// 1~max,哪个数有哪个数没有let mut set: Vec<bool> = vec![];for _ in 0..max + 1 {set.push(false);}for num in nums.iter() {set[*num as usize] = true;}let mut ans = 0;// a是当前想确定,是不是某个子序列的最大公约数,有a!let mut a = 1;while a <= max {// 1)找到,离a最近的,a的倍数!1 2 3 ... g就是let mut g = a;while g <= max {if set[g as usize] {break;}g += a;}// 2) 找到了a最近的倍数,g// g + 0 , g ?= a// g + a , g ?= a// g + 2a , g ?= a// g + 3a , g ?= alet mut b = g;while b <= max {if set[b as usize] {g = gcd(g, b);if g == a {ans += 1;break;}}b += a;}a+=1;}return ans;
}fn gcd(m: i32, n: i32) -> i32 {if n == 0 {m} else {gcd(n, m % n)}
}fn get_max<T: Clone + Copy + std::cmp::PartialOrd>(a: T, b: T) -> T {if a > b {a} else {b}
}

执行结果如下:


左神java代码

2022-09-07:给你一个由正整数组成的数组 nums 。 数字序列的 最大公约数 定义为序列中所有整数的共有约数中的最大整数。 例如,序列 [4,6,16] 的最大公约数是 2 。 数组的一个相关推荐

  1. C语言学习笔记——2022.09.07

    C语言中负数的存贮 对于有符号的数,规定其二进制代码的最高位为符号位. 只要是整数,内存中存储的的都是二进制补码 正数的原码.反码.补码相同 负数在内存中存储的是二进制的"补码" ...

  2. 2022/09/07 day04:命令3

    文章目录 创建用户.创建组 权限 gedit与sublime vim 创建用户.创建组 用户文件在etc/passwd中 创建用户:useradd XXX -m -m代表就是在文件中创建了账户,又在h ...

  3. c语言:写一个函数统计字符串的字母,数字,空格,其他字符

    c语言:写一个函数统计字符串的字母,数字,空格,其他字符 #include<stdio.h> #include<stdlib.h> #include<string.h&g ...

  4. 2022.09 青少年软件编程(图形化) 等级考试试卷(四级)

    2022.09 青少年软件编程(图形化) 等级考试试卷(四级) 分数: 100 题数: 29 一. 单选题(共 15 题, 共 30 分) 1.运行下列程序,说法正确的是?() A.列表中的数字全部小 ...

  5. Dapr中国社区活动之 分布式运行时开发者日 (2022.09.03)

    自2019年10月首次发布以来,Dapr(Distributed Application Runtime,分布式应用运行时)因其"更稳定"."更可靠".&quo ...

  6. 2022.09.23 周五

    2022.09.23 周五 计算机编程常用的进制:十进制.二进制.十六进制.八进制 1.十进制 基数:0.1.2.3.4.5.6.7.8.9 进位:逢10进1 表示方式:直接写 转换:print(其他 ...

  7. 2022.09.29 周四

    2022.09.29 周四 回顾 元组 容器:(数据1,数据2,数据3,--) 不可变的:有序的 元素:没有要求 集合 容器:{数据1,数据2,数据3,--} 可变的:无序的: 元素:不可变的数据:唯 ...

  8. 698. 划分为k个相等的子集:给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。

    题目描述 给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等. 示例 1: 输入: nums = [4, 3, 2, 3, 5, 2, 1], k ...

  9. CSP-J1 CSP-S2第1轮 初赛资料集(2022.09.09)

    1.CSP-J CSP-S NOI初赛 https://blog.csdn.net/dllglvzhenfeng/category_11823100.html 2.CCF关于举办CSP-J1 CSP- ...

最新文章

  1. Rocksdb 通过ingestfile 来支持高效的离线数据导入
  2. GDCM:gdcm::Validate的测试程序
  3. C#对Microsoft.VisualBasic My对象兰台妙选
  4. 如何打通“鱼塘” ?腾讯启动“SaaS技术联盟” 共建技术中台
  5. smarty 简单分页
  6. CreateDirectory和SHCreateDirectoryExW区别
  7. 是不是好奇号不够好奇,NASA要送机器蜜蜂上火星?
  8. centos安装docker详细步骤,如何配置阿里云镜像加速
  9. mysql5.7 密码不过期,mysql5.7 密码过期问题
  10. 知乎高赞:985计算机视觉毕业后找不到工作怎么办?
  11. 实现接口与显式实现接口的区别
  12. tomcat启动时报错ports are invalid,默认端口不要为-1
  13. 【286页干货】一天搞懂深度学习(台湾资料科学年会课程)
  14. Firefox常用扩展
  15. csdn笔记怎么用看这里
  16. MindManager 2020免费序列号激活下载及怎样运用思维导图进行头脑风暴教程
  17. 微信小程序报错unshift is not a function
  18. 炼数成金Scala语言入门
  19. Paper之RegNet:《Designing Network Design Spaces》的翻译与解读—2020年3月30日来自Facebook AI研究院何恺明团队最新算法RegNet
  20. 我的职业生涯(五) 告别六天工作制

热门文章

  1. 自然语言处理与信息与计算科学专业的联系
  2. JAVA集合取交集工具类_集合交集、差集工具类
  3. 小试墨刀------这其实不是微信
  4. 机器学习赛事:快来一起挖掘幸福感
  5. SQLZOOL练习题答案和解析 第7关 More JOIN operations
  6. 风口上的AIGC,技术人才动不动就年薪百万?
  7. RSA2012系列(5):虚拟化安全总揽
  8. OSGB转SLPK过程中,更换临时文件夹路径的方法
  9. 灰色系统理论及其应用 (九) : GM(1, N) 和GM(0, N) 模型
  10. java基础知识(一)--多态