文章目录

  • 质数:
    • 求质数
      • 试除:
      • 筛法:
        • 埃氏筛
        • 线性筛
    • 质因数分解
      • 算数基本定理
      • ex算数基本定理
    • 中国剩余定理(CRT)
    • 费马小定理
    • 更相减损法
    • 欧几里得算法
    • 拓展欧几里得算法(exgxd)
      • 裴蜀定理(BeˊzoutB\acute{e}zoutBeˊzout)
    • 欧拉函数(φ)(\varphi)(φ)

质数:

  • 质数:一个正整数不能被除了1和它本身的任何一个自然数整除的数称为质数(prime)

求质数

试除:
  • 根据质数的定义,我们可以发现:若(1<k<n)( 1< k<n)(1<k<n)都不能能整除nnn,则nnn为质数,进一步思考:如果k∣nk\mid nk∣n则定会有一个k1×k=nk_1\times k=nk1​×k=n且k1≤nk_1\leq \sqrt nk1​≤n​.
  • 所以对于任意正整数,只需要枚举2~n\sqrt nn​的所有数判断是否为nnn的约数就能判断nnn是否为质数.

筛法:
  • 当我们求1~n的所有质数时上述方法的时间复杂度就为O(n×n)O(n\times \sqrt n )O(n×n​).
  • 但使用埃氏筛,线性筛可以将复杂度优化到O(n×log⁡log⁡n)O(n\times \log\log n)O(n×loglogn)和O(n)O(n)O(n)
埃氏筛
  • 1.能被两个或多个数相乘得到的数一定不是质数.
  • 2.任何一个合数都能被若干个质数相乘得到.(算数唯一分解定理)

反证法:
假设存在一个合数n不是由若干个质数相乘得出,n存在一个最小的合数m,
因为m为合数,则定有a×b=ma\times b=ma×b=m
若a,b均为质数,则与假设相矛盾,假设不成立,
若a,b中有一个为质数,则会存在一个更小的合数m1,m_1,m1​,与假设相矛盾,假设不成立

  • 3.假设x为一个质数,则小于x2x^2x2的合数会被小于x的另一个质数y所更新(x会乘到y,同理y会乘到x)
  • 根据以上三点,我们可以得到埃拉托斯特尼筛法,简称埃氏筛
 for(int i = 2; i <= n; i ++){//注意这个从2开始,1特殊处理(筛2~n的质数)if( t[i] == 0 ) prime[ ++tot ] = i;//0代表从未被标记,即i是质数for(int j = i * i; j <= n; j += i){//从i^2开始(上述第3条)t[j] = 1;//标记程到的合数}}

线性筛

1.与埃氏筛原理一样,用质数标记合数
2.不同点:

线性筛确认了更新一个合数的唯一方式,即用这个数的最小质数去标记,所以线性筛的时间复杂度为O(n)O(n)O(n)

3.实现方法:

 for(int i = 2; i <= n; i ++){if(t[i] == 0){t[i] = i;//更新一个质数的最小质数当然是它本身ptime[++tot] = i;}for(int i = 1; i <= tot; i ++){//枚举每一个已标记的质数,去更新if(prime[i] > t[i] || prime[j] > n / i) break;//线性筛的核心//如果prime[i]>t[i],则不满足对i*prime[j]的最小更新,自己举个例子(感性理解一下)t[i * prime[i]] = prime[i];//最小的质数再乘上一个质数当然是最小的}}
  • 虽然线性筛的复杂度低,但比赛上最常用的是埃氏筛,原因是思路简单,比较方便更改(考试又不会出板子题),且loglog(n)loglog(n)loglog(n)是一个极小的数,复杂度不会比线性筛高多少,不过如果你更熟练用线性筛,那更好。

质因数分解

算数基本定理
  • N=p1c1p2c2...pk−1ck−1pkkN=p_1^{c_1}p_2^{c_2}...p_{k-1}^{c_{k-1}}p_k^{k}N=p1c1​​p2c2​​...pk−1ck−1​​pkk​
  • pip_ipi​是质数,cic_ici​是正整数。
  • 试除法:

每次尝试除一个数xxx,能整除,就让c[i]++c[i]++c[i]++(这一步就是求上面的cic_ici​)
不能整除就向后推一个数(因为一定先扫描合数的因子,所以除的数一定是质数)(这一步是求上面的pip_ipi​)
算法枚举了n\sqrt nn​个数所以时间复杂度为O(n)O(\sqrt n)O(n​)


ex算数基本定理
  • N的正约数个数:
    (c1+1)×(c2+1)×...×(ck+1)=∏i=1k(ci+1)(c_1+1)\times(c_2+1)\times...\times(c_k+1)=\prod_{i=1}^{k}(c_i+1)(c1​+1)×(c2​+1)×...×(ck​+1)=i=1∏k​(ci​+1)
  • N正约数的和:
    (1+p1+p12+...+p1c1)×(1+p2+p22+...+p2c2)×....×(1+pk+pk2+...+pkck)=∏i=1k(∑j=0ci(pi)j)(1+p_1+p_1^2+...+p_1^{c_1})\times (1+p_2+p_2^2+...+p_2^{c_2})\times....\times (1+p_k+p_k^2+...+p_k^{c_k})=\prod_{i=1}^{k}(\sum_{j=0}^{c_i}(p_i)^j)(1+p1​+p12​+...+p1c1​​)×(1+p2​+p22​+...+p2c2​​)×....×(1+pk​+pk2​+...+pkck​​)=i=1∏k​(j=0∑ci​​(pi​)j)
  • 未完待续

中国剩余定理(CRT)

  • ∑i=1nMi×ti×ai\sum_{i=1}^{n}Mi\times ti\times ai∑i=1n​Mi×ti×ai

费马小定理

  • a≡1(modp)a\equiv 1(mod~p)a≡1(mod p)
  • 求导逆元1a≡ap−2(modp)\frac 1a\equiv a^{p-2}(mod~ p)a1​≡ap−2(mod p),p为质数。

更相减损法

  • gcd(a,b)=gcd(a,a−b)=gcd(b,a−b)gcd(a,b)=gcd(a,a-b)=gcd(b,a-b)gcd(a,b)=gcd(a,a−b)=gcd(b,a−b)

欧几里得算法

  • gcd(a,b)=gcd(b,amodb)gcd(a,b)=gcd(b,a~mod~b)gcd(a,b)=gcd(b,a mod b)

拓展欧几里得算法(exgxd)

-(恶心gcd)

裴蜀定理(BeˊzoutB\acute{e}zoutBeˊzout)
  • 任意整数a,b有x,y满足ax+by=gcd(a,b)ax+by=gcd(a,b)ax+by=gcd(a,b)
  • 对于ax+by=cax+by=cax+by=c当且仅当gcd(a,b)∣cgcd(a,b)|cgcd(a,b)∣c
  • x0,y0x_0,y_0x0​,y0​为ax+by=gcd(a,b)ax+by=gcd(a,b)ax+by=gcd(a,b)的一组特解,则他的通解为
  • x=cgcd(a,b)x0x=\frac c{gcd(a,b)}x_0x=gcd(a,b)c​x0​
  • y=cgcd(a,b)y0y=\frac c{gcd(a,b)}y_0y=gcd(a,b)c​y0​

欧拉函数(φ)(\varphi)(φ)

  • 1~x中与x互质的数的个数被称为欧拉函数,记作φ(n)\varphi(n)φ(n)

1.若x为质数,φ(x)=x−1\varphi(x)=x-1φ(x)=x−1,所有数都与x互质
2.若x=pkx=p^kx=pk则φ(x)=(p−1)×pk−1\varphi(x)=(p-1)\times p^{k-1}φ(x)=(p−1)×pk−1

C++课程总结——数论相关推荐

  1. 计算区间素数和,杨老师正在上《离散数学》课程的“数论”内容,讲授素数的知识。素数又称为质数。一个大于1的整数p是素数,当且仅当p只能被1和自身整除。很显然,2是最小的素数。他想设计一个程序

    杨老师正在上<离散数学>课程的"数论"内容,讲授素数的知识.素数又称为质数.一个大于1的整数p是素数,当且仅当p只能被1和自身整除.很显然,2是最小的素数.他想设计一个 ...

  2. pta初级题库题解1~50

    #7.1判断素数 7-1 判断素数. 判断输入的整数是否是素数,如果是则输出"1",否则输出"0". 输入格式: 输入一个整数. 输出格式: 按照要求输出1或者 ...

  3. 和与余数的和同余理解_5 同余 ——数论入门知识讲解系列

    数学竞赛 数论是纯粹数学的分支之一,主要研究整数的性质,按研究方法分为初等数论和高等数论.中学生(甚至小学生)课外数学兴趣小组的许多内容是属于初等数论的,各级别数学竞赛也会把初等数论作为重点内容进行考 ...

  4. 他入狱10年自学数学,如今凭借手稿发了篇论文,被同行评价“足以开辟数论新领域”...

    杨净 梦晨 发自 凹非寺 量子位 报道 | 公众号 QbitAI 2010年,他因吸毒.杀人被捕入狱,被判有期徒刑25年. 在狱中,他靠自学数学打发时间. 没有计算机.没有老师,单靠手写.以及数学教材 ...

  5. 计算机数学专业是应用数学专业吗,大学数学系的数学与应用数学专业学什么课程内容?...

    数学,现在大多分为纯数学和应用数学,但最终都是应用数学. 数学与应用数学是计算机专业的基础和上升的平台,是与计算机科学与技术联系最为紧密的专业之一,在计算机领域做出很好的成果的,大多是数学专业背景.在 ...

  6. 《程序设计技术》课程辅助学习资料

    本文档提供课程相关的辅助学习资料. 阅读程序是提高程序设计水平的最为有效的方法,<程序设计技术>课程至少应该阅读后面提供链接博文中的基础部分.能够阅读完基础部分的博文,则可以给课程学习奠定 ...

  7. AcWing蓝桥杯AB组辅导课08、数论

    文章目录 前言 一.数论 例题 例题1:AcWing 1246. 等差数列(最大公约数,第十届蓝桥杯省赛C++B第7题) 分析 题解:最大公约数 例题2:AcWing 1295. X的因子链(算数基本 ...

  8. 计算机网络安全课程心得,学习信息安全专业的心得体会

    1.学习本专业的体会 信息安全专业是计算机.通信.数学.物理.法律.管理等学科的交叉学科,主要研究信息安全的科学与技术,培养能够从事计算机.通信.电子商务.电子政务.电子金融等领域的信息安全高级专门人 ...

  9. 密码学的中文入门书籍及课程推荐

    密码学是一门研究如何保护信息安全的学科.一种简单轻松入门密码学的方法是学习密码学史,此处推荐书籍<密码了不起[知乎出品]>(刘巍然).这是一本密码学科普读物,通过浅显生动的例子,在不涉及复 ...

最新文章

  1. 稀缺:百分之二的选择
  2. Debug ASP.NET Core 2.0源代码
  3. docker小实战和应用
  4. [剑指offer]面试题第[28]题[Leedcode][JAVA][第101题][对称二叉树][队列][递归]
  5. java遍历删除原理,Java 垃圾回收机制实现原理
  6. shell(一)——概述、变量、运算符
  7. Linux系统调用表(system call table)
  8. comsol如何定义狄利克雷边界_如何使用拓扑优化结果创建几何模型
  9. android登录操作代码,Android Studio实现第三方QQ登录操作代码
  10. 释放摄像头_防爆摄像头在使用过程中会遇到哪些问题,如何处理
  11. thinkphp-where-字符串条件
  12. 别把量化交易变成拼人力、拼硬件、拼资源的烧钱游戏
  13. Linux resolv.conf 简介
  14. 【Pytorch】torch. bmm()
  15. java 上传文件-生成文件首页缩略图 生成pdf 抓取图片
  16. 卡尔曼滤波——从推导到应用(上)
  17. ghost备份与还原系统教程 如何备份系统
  18. easyui 监听filebox文件框选择改变事件
  19. unity videoplayer视频播放无声音
  20. 使用Elastic Stack做应用的360度全观察性监控

热门文章

  1. 获取手机的设备信息和唯一ID
  2. 基于SSM的书店管理系统
  3. 前端要怎么学,前端学习路线图
  4. 指令周期 机器周期 状态周期 振荡时钟周期(时钟周期)
  5. 嵌入式硬件电路设计的基本技巧
  6. CSS样式属性margin,padding详解
  7. 盖塔机器人好_盖塔机器人的十大谜团
  8. 免费的机器学习数据集网站(6300+数据集)
  9. 关于植物大战僵尸| Plants VS Zombies 运行时 Fatal Error
  10. 怎么提取图片中的数字?快速识别方式分享