算法之 数论

news/2025/2/13 20:16:01/

文章目录

质数

质数的定义:除了本身和1,不能被其他小于它的数整除,最小的质数是 2

求解质数的几种方法
法1,根据定义,直接求解

        def zhi(i):if i == 1:return Falsefor j in range(2,i):if i % j ==0:return Falsereturn True

法2:优化暴力的解法,判断的时候只用判断到根号n,因为你如果存在一个大于根号n的因子,那就说明会存在一个小于根号n的因子,所以就不用重新判断

def zhi(i):if n <= 1:return Falsefor i in range(2, int(math.sqrt(n)) + 1):if n % i == 0:return Falsereturn True

常用的素数筛:

埃氏筛

def eratosthenes_sieve(n):is_prime = [True] * (n + 1)  # 初始化所有数为质数is_prime[0] = is_prime[1] = False  # 0 和 1 不是质数for i in range(2, int(n**0.5) + 1):  # 只需遍历到 sqrt(n)if is_prime[i]:  # 如果 i 是质数for j in range(i * i, n + 1, i):  # 标记 i 的所有倍数为合数is_prime[j] = Falseprimes = [i for i, prime in enumerate(is_prime) if prime]  # 提取所有质数return primes

欧式筛
在这里插入图片描述

def euler_sieve(n):is_prime = [True] * (n + 1)  # 初始化所有数为质数primes = []  # 存储筛选出的质数for i in range(2, n + 1):if is_prime[i]:primes.append(i)  # i 是质数,加入 primes 数组for p in primes:if i * p > n:break  # 超过范围,退出循环is_prime[i * p] = False  # 标记 i * p 为合数if i % p == 0: # 说明 p 是 i 的最小的质因数break  # 保证每个合数只被最小质因数筛掉return primes

判断质数

3115.质数的最大距离

3115.质数的最大距离

在这里插入图片描述

思路分析:采用双指针进行判断,这样可以快速求解

class Solution:def maximumPrimeDifference(self, nums: List[int]) -> int:# 策略,使用双指针,从两边进行遍历,如果发现是质数就停下来# 判断质数def zhi(i):if i == 1:return Falsefor j in range(2,i):if i % j ==0:return Falsereturn Truen = len(nums)# 双指针l,r = 0,n-1while not zhi(nums[l]):l+=1while not zhi(nums[r]):r-=1return r-l

质数筛选

204.计数质数

204.计数质数

在这里插入图片描述

思路分析:直接考虑使用欧式筛,注意题目是小于n的素数个数

class Solution:def countPrimes(self, n: int) -> int:# 两种做法,可以采用欧式筛def euler(m):isprime = [True]*(m+1) # 存储判断i是否是素数prime = []for i in range(2,m):# 如果是素数if isprime[i]:prime.append(i)for j in prime:if i*j > m:breakisprime[i*j] = Falseif i%j ==0:break # 确保每个数字只能被最小的质因数筛选return primereturn len(euler(n))

2761.和等于目标值的质数对

2761.和等于目标值的质数对

在这里插入图片描述

思路分析:首先使用欧拉筛进行筛选出小于等于n的素数的情况,然后使用双指针进行判断

class Solution:def findPrimePairs(self, n: int) -> List[List[int]]:# 先使用欧式筛进行预处理def euler(m):isprime = [True]*(m+1)prime = []for i in range(2,m+1):if isprime[i]:prime.append(i)for j in prime:if i*j > m:breakisprime[i*j] = Falseif i%j == 0:breakreturn primeprime = euler(n)# 还是采用双指针吧length = len(prime)l,r = 0,length-1ans = []while l<=r:if prime[l]+prime[r] < n:l+=1elif prime[l]+prime[r] == n:ans.append([prime[l],prime[r]])l+=1r-=1else:r-=1# 排序非递减排序ans.sort(key=lambda x : x[0])return ans

2521.数组乘积中的不同质因数数目

2521.数组乘积中的不同质因数数目
在这里插入图片描述

思路分析:通过不断的判断

class Solution:def distinctPrimeFactors(self, nums: List[int]) -> int:s = set()for x in nums:i = 2while i*i <=x:if x % i == 0:s.add(i)x //= iwhile x%i == 0:x//=i i+=1# 最后可能只剩下那个数直接加进去if x>1:s.add(x)return len(s)

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

相关文章

讲解下MySql的外连接查询在SpringBoot中的使用情况

在Spring Boot中使用MySQL的外连接查询时&#xff0c;通常通过JPA、MyBatis或JDBC等持久层框架来实现。外连接查询主要用于从多个表中获取数据&#xff0c;即使某些表中没有匹配的记录。外连接分为左外连接&#xff08;LEFT JOIN&#xff09;、右外连接&#xff08;RIGHT JOIN&…

【HarmonyOS Next 自定义可拖拽image】

效果图&#xff1a; 代码&#xff1a; import display from "ohos.display" import { AppUtil } from "pura/harmony-utils"/*** 自定义可拖拽图标组件*/ Component export default struct DraggableImage {imageResource?: ResourceimageHeight: numbe…

【PDF提取内容】如何批量提取PDF里面的文字内容,把内容到处表格或者批量给PDF文件改名,基于C++的实现方案和步骤

以下分别介绍基于 C 批量提取 PDF 里文字内容并导出到表格&#xff0c;以及批量给 PDF 文件改名的实现方案、步骤和应用场景。 批量提取 PDF 文字内容并导出到表格 应用场景 文档数据整理&#xff1a;在处理大量学术论文、报告等 PDF 文档时&#xff0c;需要提取其中的关键信…

使用Node.js进行串口通信

目录 一、 安装 serialport 库二.、实现方法1.打开串口并配置参数2. 向串口传递信息3. 接收串口信息4. 处理错误5. 关闭串口6. 使用解析器7. 获取串口列表 三、 完整示例代码 一、 安装 serialport 库 首先&#xff0c;需要安装 serialport 库。可以通过 npm 安装&#xff1a;…

实战教程:如何利用DeepSeek结合深度学习与NLP技术实现跨模态搜索与个性化推荐

跨模态搜索与个性化推荐是当前人工智能领域中的热门话题,DeepSeek作为结合深度学习与自然语言处理(NLP)技术的创新平台,提供了在多模态数据间进行搜索与推荐的强大能力。本教程将带你一步步实现基于DeepSeek的跨模态搜索和个性化推荐,详细讲解整个过程的实现方法,从数据准…

蓝耘智算平台部署deepseek-助力深度学习

一、deepseek的几大特点&#xff08;一&#xff09;自然语言处理能力&#xff08;二&#xff09;代码生成与编程辅助功能&#xff08;三&#xff09;数学推理与计算能力&#xff08;四&#xff09;多模态处理能力 二、蓝耘智算平台即 “元生代” 智算云平台三、蓝耘智算平台部署…

【AI时代】以聊天框的模式与本地部署DeepSeek交互 (Docker方式-Open WebUI)

一、本地部署DeepSeek 参考地址&#xff1a;(含资源下载) https://blog.csdn.net/Bjxhub/article/details/145536134二、安装Docker https://www.docker.com/ 三、拉取Open WebUI 镜像 docker pull ghcr.io/open-webui/open-webui:main 四、启动并验证 启动: docker run …

springboot239-springboot在线医疗问答平台(源码+论文+PPT+部署讲解等)

&#x1f495;&#x1f495;作者&#xff1a; 爱笑学姐 &#x1f495;&#x1f495;个人简介&#xff1a;十年Java&#xff0c;Python美女程序员一枚&#xff0c;精通计算机专业前后端各类框架。 &#x1f495;&#x1f495;各类成品Java毕设 。javaweb&#xff0c;ssm&#xf…