算法--数论

news2024/11/26 11:59:25

这里写目录标题

  • 质数(素数)
    • 定义
    • 判断是否为质数
      • 暴力写法,试除法
        • 基本思想
        • 具体写法
      • 优化
        • 基本思想(时间复杂度根号n)
        • 具体写法
    • 分解质因数
      • 分析题意
      • 暴力写法
        • 基本思想
        • 具体代码
      • 优化
        • 基本思想(时间复杂度小于等于根号n)
        • 具体代码
    • 筛质数(区别于判断质数,这个是筛选出来并保存,质数的数目较多)
      • 基本思想
      • 具体代码
      • 优化(埃氏算法)
        • 基本思想(时间复杂度约为n)
        • 具体代码
      • 优化2(线性筛法)
        • 基本思想
        • 具体代码
  • 约数
    • 求一个数的所有约数
      • 试除法
    • 约数个数
      • 基本思想
      • 具体题目+代码
        • 题目以及分析
        • 代码
    • 约数之和
      • 基本思想
      • 具体代码
    • 求最大公约数
      • 基本思想(欧几里得算法)
      • 具体代码

质数(素数)

定义

在这里插入图片描述

判断是否为质数

暴力写法,试除法

基本思想

从定义出发,判断是否为质数
1、小于2的数,统一返回false
2、遍历 i 从2到小于n(即除去1和n)
判断是否有n % i == 0 的,表示这中间有i可以整除,如果有,返回false

最后返回true

具体写法

在这里插入图片描述

优化

基本思想(时间复杂度根号n)

在这里插入图片描述
利用质数的性质,当d能被n整除时,n/d 也能被n整除,
所以,只需要判断从2到根号n有无能让d整除的数即可

具体写法

在这里插入图片描述
这里的 i 就是上面的d,循环 i 判断是否有数能让n整除,也就是上面的判断d是否能让n整除

分解质因数

分析题意

在这里插入图片描述
质因子分解,就是输出几组质数并输出他们对应的数量,他们乘积等于输入的数

暴力写法

基本思想

直接循环所有从2到等于n的数,如果能找到一个被n整除的 i ,那么 i 一定是一个质数,这里与上面判断质数的代码要区分开,
上面写到:
for循环里,if(n % i == 0) return false
因为上面是判断n是否为质数,跟 i 没有关系
而本题的重点不在n,而是他的因子 i,所以这里当可以整除时, i 一定是一个质数,这句话就不会与上面矛盾了

具体代码

在这里插入图片描述
纠正:int x 改为 int n
循环i从2到小于等于n,其中如果找到了一个i能被n整除,那么这个i一定是质数,他就是我们要找的质因子之一(具体原因见上方“基本思想”),之后循环计算 i 的次数即可
循环计算质数次数时:
首先定义一个计数器s=0;
之后,while循环,条件是n 还可以整除 i
条件成立,就更新n 为 n/i,(因为题设是多个质因子的乘积,所以要进行下一步判断的话,要先将已经判断出来的 i 除去)
之后计数器++
输出质子以及出现的次数

优化

基本思想(时间复杂度小于等于根号n)

在这里插入图片描述
利用性质:n中最多只包含一个大于根号n的质因子
证明:如果有两个大于跟好n的质因子,那么这两个相乘,一定大于n,不成立,所以该性质成立,我们可以利用这个性质进行优化

具体代码

在这里插入图片描述

将for循环的 i ,从2开始循环到 小于等于n/i
然后,其他的不变,在for循环结束之后,如果n>1(因为n在上面的过程中,不断的被除开,不断的变小,被除开的原因见上面“未优化时具体代码的解释”),那么这个n就是那个大于根号n的质因子,他的个数永远为1,因为只存在一个大于根号n的质因子

tip:puts(“”);可以输出一行回车
同时puts(“字符串”);可以输出字符串

筛质数(区别于判断质数,这个是筛选出来并保存,质数的数目较多)

基本思想

在这里插入图片描述
从2开始,删除后面2的倍数、删除3的倍数、4、5…
最后留下的都是质数,
因为假设p被留下了,那么就是前面2到p-1都没能把p删掉,也就是前面的倍数都没有p,所以p也就没有除去1和本身以外的因子,所以p一定是质数

具体代码

在这里插入图片描述
纠正:17行 primes【】= i
prime数组用来存放质数
cnt用来移动prime数组里的坐标,同时也在计数
st数组用来记录某个数是否被删掉了

首先从2到小于等于n遍历 i
之后 直接判断是否st[i]为假,如果是,那么放入prime数组中,并且cnt++
if之后,使用for循环对倍数进行删除:
初始化 j 为 i+i ; j <=n ; j += i
st[j]=true
初始化为 i 的2倍,之后递增条件是在 j 的基础上依次加 i,这样就可以找到 i 的所有倍数

优化(埃氏算法)

基本思想(时间复杂度约为n)

在这里插入图片描述
我们的目的是删掉合数,
任何一个合数都会被筛掉,因为质数的倍数包括所有的合数,任何一个合数都有一个质因子
所以我们只需要删除出来前面质数的倍数即可

具体代码

在这里插入图片描述
纠正:17行 primes【】= i
将for循环放入if里面即可

优化2(线性筛法)

基本思想

在这里插入图片描述
埃氏筛法:
我们的目的是删掉合数,
任何一个合数都会被筛掉,因为质数的倍数包括所有的合数,任何一个合数都有一个质因子
所以我们只需要删除出来前面质数的倍数即可

线性筛法的思路仍然是删掉质数的倍数 , 但是这种算法是根据每个最小质因子的倍数去筛,效率更高

具体代码

在这里插入图片描述
仍然是for循环 i 从2到小于等于 n
之后if不变
改变一下第二个for循环 :
j初始化为0 ;之后primes[j]<= n/i ;j++
然后标记st[primes[ j ] * i ]=true; (删除每个最小质因子的倍数)
之后加一个if (i % primes[ j ] == 0) break; (这一步可以保证primes[ j ]是 i 的最小质因子)

注意点:关于筛质数的三个算法中,只有该算法的第二个for循环不同于其他两个,前两个的第二个for循环都一样,只是位置不同,要特别注意

约数

求一个数的所有约数

试除法

在这里插入图片描述
注意返回值是一个vector容器

首先是for循环从1到小于等于n
if i能被n整除
那么这个i就是一个约数,加入到容器中
另外这里需要一个特判:如果 i != n / i ,就把n / i 加到容器中,(因为约数不同于质数,约数是成对出现的,当我们找到一个 i 之后,可以顺势将其成对的另一个也加入到容器,前提是 i != n / i ,保证是两个成对的约数不相同时才加进去)

约数个数

基本思想

在这里插入图片描述
对于一个数N,可以写成多项的多次相乘的形式,这样的话,约数个数就是各个指数各自加一之后相乘的结果
原因:因为约数也就是N的因子,当N写成上图这种形式的时候,随便去掉一个p的一个次幂,相当于提出来了一个p的一次,而剩下的部分,还是N的因子,也还是N的约数,而a1次方的话,有0到a1一共(a1+1)种提法,所以所有的提法排列组合的个数,就是约数的个数

具体题目+代码

题目以及分析

在这里插入图片描述
该题是一个n个整数乘积的原始数,所以,我们在求这个数的约数个数时,要先将乘积得到的结构进行分解,分解成指数相乘形式,具体我们可以先对每一个数进行分解,每个数分解出来指数形式之后,存入一个map里,这样依次进行下去,就可以得到一个个的底数和次幂组合,拿到这些组合,就可以计算约数个数或者约数之和
在这里插入图片描述

代码

在这里插入图片描述
首先,操作的目标放在每一个输入进来的数,依次对其进行分解,分解的方式采用质因子分解:(实际上与上面的质因子分解如出一辙):
对于n个循环,每输入一个x,
我们对其进行一个for循环,i 从2到 小于等于 x / i
for循环里while循环,如果有x % i ==0
更新x(去除掉 i 部分)
同时primes[ i ] ++,i 的map值就是以 i 为底的组合中的次幂部分
for循环之后,就是对那个大于根号x的质子的特判,将其加入到primes的map中

之后就是根据题设套不同的公式,这里是求约数的个数,带入约数的个数公式即可,如上图

tips:
在这里插入图片描述
typedef long long LL;
数据范围巨大的数会用到LL

10的9次方+7,表示为: 1e9+7

约数之和

基本思想

在这里插入图片描述

具体代码

在这里插入图片描述
核心代码与上面的一样,不同的是公式的计算
for循环里面使用迭代器
对于每一个prime,先取出来first 以及 second
然后计算出他的p的0+p的1+p的2+p的3+…:
while(a–)t = (t * p +1),这样的话就可以得到p的0+p的1+p的2+p的3+…,上图取mod,是为了在这里取一次,可以节省效率
之后将while得到的t,乘入res,并取模,即可

具体while中的公式效果见下图:
在这里插入图片描述

求最大公约数

基本思想(欧几里得算法)

在这里插入图片描述
重要的是上图第二行被框住的部分
a 和 b 的最大公约数,可以转化为求b 和 a mod b 的最大公约数

具体代码

在这里插入图片描述
一行的模版
直接返回 b ?gcd(b, a % b ) : a
当b不为0时,返回gcd(b , a % b),递归下去
当b等于0,返回a即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1426058.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

聊聊ClickHouse MergeTree引擎的固定/自适应索引粒度

前言 我们在刚开始学习ClickHouse的MergeTree引擎时&#xff0c;就会发现建表语句的末尾总会有SETTINGS index_granularity 8192这句话&#xff08;其实不写也可以&#xff09;&#xff0c;表示索引粒度为8192。在每个data part中&#xff0c;索引粒度参数的含义有二&#xf…

Camera | 15.闪光灯SGM3141概述

芯片说明 SGM3141是一种电流调节降压/升压电荷泵LED驱动器&#xff0c;能够驱动700M输出电流。它非常适合为相机闪光灯应用的高亮度LED供电。SGM3141具有1/2操作模式&#xff0c;用于控制闪光和火炬模式的输出电流。 电源电压在2.7V到5.5V之间工作&#xff0c;非常适合由1芯锂…

CDS view与替代对象

一&#xff0c;简介 替代对象是指用一个CDS view指派给一个透明表或常规数据库视图&#xff0c;使得透明表或常规数据库视图的访问重定向到该CDS view。 替代有诸多要求&#xff1a; 字段数量一致且同名对应&#xff0c;顺序可以不一致对应的字段数据类型长度等必须一致CDS v…

文心一言APP上线新功能,一张照片、三句话即可生成专属数字分身

只需一张照片、录制三句话&#xff0c;就能拥有一个自己的数字分身&#xff1f;这不是科幻电影&#xff0c;而是文心一言APP上线的新功能 - 数字分身。 目前&#xff0c;文心一言APP正在内测数字分身新功能&#xff0c;明天起&#xff0c;iOS和Android用户升级新版本后&#xf…

超简单设置Windows共享文件夹,传输文件无烦恼

前言 开始之前&#xff0c;先让小白感叹一下科技发展真快呀&#xff01;&#xff08;这句话纯粹是为了凑点字数&#xff09; 随着科技的发展&#xff0c;人们手上总会有各种各样的电子设备&#xff1a;电脑、平板、手机、游戏机、电视盒子等等&#xff5e; 有时候想要传输个文…

【Docker】【深度学习算法】在Docker中使用gunicorn启动多个并行算法服务,优化算法服务:从单进程到并行化

文章目录 优化算法服务&#xff1a;从单进程到并行化单个服务架构多并行服务架构Docker化并指定并行服务数量 扩展知识 优化算法服务&#xff1a;从单进程到并行化 在实际应用中&#xff0c;单个算法服务的并发能力可能无法满足需求。为了提高性能和并发处理能力&#xff0c;我…

MySQL基础(三)-学习笔记

一.innodb引擎&#xff1a; 1). 表空间&#xff1a;表空间是InnoDB存储引擎逻辑结构的最高层&#xff0c;启用了参数 innodb_file_per_table(在 8.0版本中默认开启) &#xff0c;则每张表都会有一个表空间&#xff08;xxx.ibd&#xff09;&#xff0c;一个mysql实例可以对应多个…

figure方法详解之清除图形内容

figure方法详解之清除图形内容 一 clf():二 clear():三 clear()方法和clf()方法的区别&#xff1a; 前言 Hello 大家好&#xff01;我是甜美的江。 在数据可视化中&#xff0c;Matplotlib 是一个功能强大且广泛使用的库&#xff0c;它提供了各种方法来创建高质量的图形。在 Mat…

p2Cache: Exploring Tiered Memory for In-Kernel File Systems Caching——论文泛读

ATC 2023 Paper 分布式元数据论文汇总 问题 快速、字节寻址的持久性内存&#xff08;PM&#xff09;正在产品中变得越来越现实。然而&#xff0c;使传统的内核文件系统完全支持PM需要大量的工作&#xff0c;面临着在块级访问粒度和字节寻址之间转换的挑战。此外&#xff0c;新…

react 之 react.memo

React.memo 作用&#xff1a;允许组件在props没有改变的情况下跳过重新渲染 组件默认的渲染机制 默认机制&#xff1a;顶层组件发生重新渲染&#xff0c;这个组件树的子级组件都会被重新渲染 // memo // 作用&#xff1a;允许组件在props没有改变的情况下跳过重新渲染import…

UGUI中Text和TextMeshPro实现图文混排方式

一些项目中实现图文混排是自定义一个脚本去继承Text类&#xff0c;然后文本中用富文本的方式进行图片和超链接的定义&#xff0c;在代码中用正则表达式匹配的方式把文本中图片和超链接给替换&#xff0c;如下&#xff1a; TextMeshPro实现是生成SpriteAsset进行图文混排的&…

SpringCloud + Nacos配置文件加载顺序和优先级详解

文章目录 一、加载顺序与优先级1. 示例配置2. 配置文件分类3. 加载顺序4. 优先级 二、本地配置优先的设置结论 在微服务架构中&#xff0c;合理地管理和理解配置文件的加载顺序与优先级对于确保应用的稳定性和灵活性至关重要。特别是在使用 Spring Cloud Alibaba Nacos 作为配置…

数组与字符串深度巩固

经过再三思考觉得今天就写一篇关于数组与字符串相关的文章吧&#xff01;其中字符串主要通过练习来巩固知识亦或是获得新知识。好接下来将进行我们的学习时刻了。 首先我们来思考一个问题&#xff0c;你真的了解数组的数组名吗&#xff1f;数组名真的就单单一个名字而已吗&…

nodejs+vue+mysql校园失物招领网站38tp1

本高校失物招领平台是为了提高用户查阅信息的效率和管理人员管理信息的工作效率&#xff0c;可以快速存储大量数据&#xff0c;还有信息检索功能&#xff0c;这大大的满足了用户和管理员这两者的需求。操作简单易懂&#xff0c;合理分析各个模块的功能&#xff0c;尽可能优化界…

【unity小技巧】unity3d创建和实现破碎打破物品,万物可破碎

文章目录 破碎插件可破碎的物品代码控制加入破坏力完结 破碎插件 关于物品破碎&#xff0c;其实之前已经分享过一个免费插件&#xff0c;如果没有碎片化的模型&#xff0c;可以选择使用这个插件&#xff1a; OpenFracture插件实现unity3d物体破裂和切割 可破碎的物品 代码控制…

zsh: command not found: mysql (mac通过安装MySQL后终端cmd找不到mysql命令)

考虑是mysql环境变量没有配置的问题 1.查找mysql安装路径 ps -ef|grep mysql 2.先启动上安装的mysql 3. 查看 .bash_profile 文件 ls -al 查看是否有(.bash_profile)文件 如果没有就输入以下命令创建一个&#xff0c;再查看 touch .bash_profile 4.打开 .bash_profile 文件 …

Spring的事件监听机制

这里写自定义目录标题 1. 概述&#xff08;重点&#xff09;2. ApplicationEventMulticaster2.1 SimpleApplicationEventMulticaster2.2 AbstractApplicationEventMulticaster 3. ApplicationListener3.1 注册监听器3.2 自定义 4. SpringApplicationRunListeners 1. 概述&#…

气膜厂家产品种类繁多,哪种适合您?

气膜是一种以薄膜为材料、通过气体充气而形成的充气结构。由于其轻便、灵活、耐用等优点&#xff0c;在各个领域都有广泛应用。气膜厂家生产的产品种类繁多&#xff0c;下面将介绍几种常见的气膜产品&#xff0c;并分析哪种适合您。 气膜建筑是气膜厂家的特色产品之一。气膜建…

探析零知识证明高能发展路径:走向更安全、私密且可扩展的 Web3 新时代

原文&#xff1a;https://www.coinbase.com/blog/understanding-the-zero-knowledge-landscape 作者&#xff1a;Jonathan King&#xff5c;Coinbase Ventures 编译&#xff1a;TinTinLand 本文核心观点 2023 年&#xff0c;零知识技术吸引了逾 4 亿美元的投资&#xff0c;主…

凝聚共识开新篇:产业“围炉谈”共促5G-A加速

由北京通信学会主办的“新阶段、新体验、新价值”产业围炉谈活动在北京时间1月25日已成功举办。 来自社会各界的专家代表齐聚一堂&#xff0c;围炉畅谈5G-A产业发展&#xff0c;共同呼吁5G-A产业加速&#xff0c;擘画数字发展新画卷。 承前启后&#xff0c;5G-A开启5G新阶段 …