[Go版]算法通关村第十三关黄金——数字数学问题之数论问题(最大公约数、素数、埃氏筛、丑数)

news/2023/11/30 8:11:14

目录

题目:辗转相除法(求最大公约数)

题目链接:LeetCode-1979. 找出数组的最大公约数
在这里插入图片描述

思路分析:辗转相除法(也叫欧几里得算法)gcd(a,b) = gcd(b,a mod b)

辗转相除法其核心部分为:若r 是a ÷ b的余数,则 gcd(a, b)=gcd(b, r)

复杂度:时间复杂度 O ( n + l o g ( m a x ) ) O(n+log(max)) O(n+log(max))、空间复杂度 O ( 1 ) O(1) O(1)

Go代码

func findGCD(nums []int) int {max, min := getMaxMin(nums)return getGcd(max, min)
}
// gcd求最大公约数
func getGcd(a int, b int) int {yu := 0for b != 0 {yu = a % b  //得到余数a = b       //根据辗转相除法,把被除数赋给除数b = yu      //余数赋给被除数}return a        //返回除数
}
func getMaxMin(nums []int) (max int, min int) {max, min = nums[0], nums[0]length := len(nums)for i:=1; i<length; i++ {if nums[i] > max {max = nums[i]}if nums[i] < min {min = nums[i]}}return
}

题目:判断是否是素数

思路分析:判断n是否是素数只需测试 2 到 sqrtN 的所有可能因子 + “6K +1/-1” 规则

复杂度:时间复杂度 O ( s q r t ( n ) ) O(sqrt(n)) O(sqrt(n))、空间复杂度 O ( 1 ) O(1) O(1)

Go代码

func isPrimes(n int) bool {if n <= 1 {return false}if n <= 3 {return true}if n%2==0 || n%3==0 {return false}// 判断n是否是素数时,只需要测试 2 到 sqrtN 的所有可能因子// max := int(math.Pow(float64(n), 0.5))max := int(math.Sqrt(float64(n)))// 根据 "6K +1/-1" 规则for i:=5; i<=max; i+=6 {// i+2 正好是 "6K +1/-1" 中的一个值if n % i == 0 || n%(i+2) == 0 {return false}}return true
}

题目:埃氏筛

题目链接:LeetCode-204. 计数质数
在这里插入图片描述

思路分析:埃氏筛法思想,逐步排除掉不是质数的数

如果 x 是质数,那么大于 x 的 x 的倍数 2x,3x,… 一定不是质数。
在这里插入图片描述

复杂度:时间复杂度 O ( n l o g l o g n ) O(n log log n) O(nloglogn)、空间复杂度 O ( n ) O(n) O(n)

  • 时间复杂度分析:
    • 外层循环的迭代次数是 n-2,即 O ( n ) O(n) O(n) 次。
    • 内层循环的迭代次数是在素数的情况下,从 i*i 开始,每次递增 i,直到 n。这是因为小于 i 的倍数在之前已经被标记为非质数。内层循环迭代次数约为 n/i,其中 i 为质数。因此,总的迭代次数为 n/2 + n/3 + n/5 + …,这个和式是 O ( n l o g l o g n ) O(n log log n) O(nloglogn)的。

Go代码

func countPrimes(n int) int {count := 0isNotPrimes := make([]bool, n)for i:=2; i<n; i++ {if !isNotPrimes[i] {count++for j:=i*i; j<n; j+=i {isNotPrimes[j] = true}}}return count
}

或者 下面这个语言更清晰,不过多了 O ( n ) O(n) O(n)的时间复杂度

func countPrimes(n int) (count int) {isPrimies := make([]bool, n)for i, _ := range isPrimies {isPrimies[i] = true}for i:=2; i<n; i++ {// 从2开始已经把2的所有倍数标记为false,3也是,所以剩下的未标记的都是质数if isPrimies[i] {count++// 直接从i*i开始标记,因为2i,3i...这些数一定在i之前就被其他数的倍数标记过了,例如2的所有倍数,3的所有倍数等for j:=i*i; j<n; j+=i {isPrimies[j] = false}}}return
}

题目:判断是不是丑数

题目链接:LeetCode-263. 丑数
在这里插入图片描述

思路分析:循环除2 3 5 判断最后值是否==1

复杂度:时间复杂度 O ( l o g n ) O(log n) O(logn)、空间复杂度 O ( 1 ) O(1) O(1)

  • 时间复杂度:取决于对n除以2 3 5的次数,由于每次至少将n除以2,所以除法运算的次数不会超过 O ( l o g n ) O(log n) O(logn)

Go代码

func isUgly(n int) bool {if n < 1 {return false}if n == 1 {return true}arr := [3]int{2,3,5}for _, v := range arr {for n%v == 0 {n = n/v}}return n == 1
}

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

相关文章

SAP S/4 BP(Business Partner)之一次性客商设置

目录 前言 一、一次性客商是什么&#xff1f; 二、BP创建步骤 1.开始步骤 总结 前言 在ECC里的一次性客商跟在S/4有一些区别&#xff0c;本文主要介绍在S/4里创建一次性BP的步骤。 一、一次性客商是什么&#xff1f; 一次性供应商是指我们通常不经常从其采购材料的供应商…

利用register_forward_hook()精确定位到模型某一层的输入和输出

在论文中偶然读到一些方法会用到模型中间的隐藏层作为分类器&#xff0c;与模型最后一层作为分类器的性能进行对比&#xff0c;故而思考如何能够简便快捷地实现将模型某一层的输出输出拉取出来的方法&#xff0c;发现有现成hook函数可以做到这一点。 hook hook就是一个钩子&a…

【学习FreeRTOS】第11章——FreeRTOS中任务相关的其他API函数

1.函数总览 序号函数描述1uxTaskPriorityGet()获取任务优先级2vTaskPrioritySet()设置任务优先级3uxTaskGetNumberOfTasks()获取系统中任务的数量4uxTaskGetSystemState()获取所有任务的状态信息5vTaskGetInfo()获取单个任务的状态信息6xTaskGetCurrentTaskHandle()获取当前任…

基于LSTM深度学习网络的时间序列分析matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 % 随机打乱数据集并划分训练集和测试集 index_list randperm(size(wdata, 1)); ind …

LeetCode 786. 第 K 个最小的素数分数

&#x1f517; 原题链接&#xff1a;786. 第 K 个最小的素数分数 本题可以暴力求解&#xff1a; class Solution { public:vector<int> kthSmallestPrimeFraction(vector<int>& arr, int k) {int n arr.size();vector<pair<int, int>> frac;for …

flutter TARGET_SDK_VERSION和android 13

config.gradle ext{SDK_VERSION 33MIN_SDK_VERSION 23TARGET_SDK_VERSION 33COMPILE_SDK_VERSION SDK_VERSIONBUILD_TOOL_VERSION "33.0.0"//兼容库版本SUPPORT_LIB_VERSION "33.0.0"}app/build.gradle里面的 defaultConfig {// TODO: Specify your…

云服务器和虚拟主机区别

虚拟主机和云服务器是常见的网站托管方式&#xff0c;都可以让网站在互联网上运行&#xff0c;但是它们有很大的区别。本文将从使用场景、性能、安全性、灵活性、价格等方面详细介绍虚拟主机和云服务器的区别。 一、使用场景 虚拟主机是一个物理服务器通过虚拟化技术划分成多…

配置NTP时间服务器

1.配置ntp时间服务器&#xff0c;确保客户端主机能和服务主机同步时间 ​ 客户端主机 同步成功 2.配置ssh免密登陆&#xff0c;能够通过客户端主机通过redhat用户和服务端主机基于公钥验证方式进行远程连接

攻防世界-Web_php_include

原题 解题思路 php://被替换了&#xff0c;但是只做了一次比对&#xff0c;改大小写就可以绕过。 用burp抓包&#xff0c;看看有哪些文件 flag明显在第一个PHP文件里&#xff0c;直接看

高等数学:线性代数-第二章

文章目录 第2章 矩阵及其运算2.1 线性方程组和矩阵2.2 矩阵的运算2.3 逆矩阵2.4 Cramer法则 第2章 矩阵及其运算 2.1 线性方程组和矩阵 n \bm{n} n 元线性方程组 设有 n 个未知数 m 个方程的线性方程组 { a 11 x 1 a 12 x 2 ⋯ a 1 n x n b 1 a 21 x 1 a 22 x 2 ⋯ a …

机器学习基础之《分类算法(4)—案例:预测facebook签到位置》

一、背景 1、说明 2、数据集 row_id&#xff1a;签到行为的编码 x y&#xff1a;坐标系&#xff0c;人所在的位置 accuracy&#xff1a;定位的准确率 time&#xff1a;时间戳 place_id&#xff1a;预测用户将要签到的位置 3、数据集下载 https://www.kaggle.com/navoshta/gr…

OpenCV最常用的50个函数

Python版&#xff1a;OpenCV提供了众多图像处理算子和函数&#xff0c;涵盖了各种任务和技术。以下是OpenCV中一些常用的50个算子和函数&#xff1a; cv2.imread&#xff1a;用于读取图像文件。cv2.imshow&#xff1a;用于显示图像。cv2.imwrite&#xff1a;用于保存图像。cv2…

c++——单例模式

c单例模式 1、概念&#xff1a; 单例模式确保一个类只有一个实例&#xff0c;并提供一个全局访问点以获取该实例。这通常通过让类的构造函数为私有&#xff0c;以防止外部直接实例化&#xff0c;然后提供一个静态方法来获取实例。 2、实现方法&#xff1a; 实现单例模式的主…

MATLAB R2023a for Mac Update_5

MATLAB是一种高级的计算机编程环境和开发工具&#xff0c;主要用于数值计算、数据分析、算法开发和可视化。它由MathWorks公司开发&#xff0c;被广泛应用于科学研究、工程设计、数据分析和教育等领域。 MATLAB提供了丰富的数学和工程函数库&#xff0c;可以进行矩阵运算、信号…

Lua 编译执行和错误处理

一、编译 Lua 是一门解释型语言&#xff0c;意味着他能执行动态生成的代码&#xff0c;而这主要由于 dofile 和 loadfile 函数的存在。 这两个函数能够让我们的代码加载和执行代码&#xff0c;具体的我们一个个进行分享 1-1、loadfile(filename, mode, env) 类似于 load 函…

基于FPGA的FIR低通滤波器实现(附工程源码),matlab+vivado19.2+simulation

基于FPGA的FIR低通滤波器实现(附工程源码) 文章目录 基于FPGA的FIR低通滤波器实现(附工程源码)前言一、matlab设计FIR滤波器&#xff0c;生成正弦波1.设计FIR滤波器1.生成正弦波.coe 二、vivado1.fir滤波器IP核2.正弦波生成IP核3.时钟IP核设置4.顶层文件/测试文件代码 三.simul…

项目实战笔记2:硬技能(上)

序&#xff1a; 本节串讲了项目管理硬技能&#xff0c;有些术语可以结合书或者网上资料来理解。没有想书上讲的那样一一列举。 做计划 首先强调为什么做计划&#xff1f; 计划就是各个角色协同工作的基准&#xff08;后面做风险监控、进度的监控&#xff09;&#xff0c;贯穿于…

js实现定时器

用原生js实现一个倒计时效果.最下面有全部源码,需要自取 js语法: setTimeout:定时器 document.getElementById:Document的方法 getElementById()返回一个匹配特定 ID的元素。由于元素的 ID 在大部分情况下要求是独一无二的&#xff0c;这个方法自然而然地成为了一个高效查找特…

Qt+C++动力监控动画仿真SCADA上位机

程序示例精选 QtC动力监控动画仿真SCADA上位机 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<QtC动力监控动画仿真SCADA上位机>>编写代码&#xff0c;代码整洁&#xff0c;规则…

ide-eval-resetter jar包下载、源码、使用介绍

如果你在找ide-eval-resetter插件&#xff0c;这里告诉你&#xff0c;2021.3版本开始该插件正式失效。 如果你安装的JB产品版本低于2021.3版本&#xff0c;你确定要找ide-eval-resetter&#xff0c;下面提供相关链接希望对你有帮助。 ide-eval-resetter源码&#xff1a; Githu…
最新文章