C++课程总结——数论
文章目录
- 质数:
- 求质数
- 试除:
- 筛法:
- 埃氏筛
- 线性筛
- 质因数分解
- 算数基本定理
- 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×loglogn)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=p1c1p2c2...pk−1ck−1pkk
- 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=1nMi×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)cx0
- y=cgcd(a,b)y0y=\frac c{gcd(a,b)}y_0y=gcd(a,b)cy0
欧拉函数(φ)(\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的整数p是素数,当且仅当p只能被1和自身整除。很显然,2是最小的素数。他想设计一个程序
杨老师正在上<离散数学>课程的"数论"内容,讲授素数的知识.素数又称为质数.一个大于1的整数p是素数,当且仅当p只能被1和自身整除.很显然,2是最小的素数.他想设计一个 ...
- pta初级题库题解1~50
#7.1判断素数 7-1 判断素数. 判断输入的整数是否是素数,如果是则输出"1",否则输出"0". 输入格式: 输入一个整数. 输出格式: 按照要求输出1或者 ...
- 和与余数的和同余理解_5 同余 ——数论入门知识讲解系列
数学竞赛 数论是纯粹数学的分支之一,主要研究整数的性质,按研究方法分为初等数论和高等数论.中学生(甚至小学生)课外数学兴趣小组的许多内容是属于初等数论的,各级别数学竞赛也会把初等数论作为重点内容进行考 ...
- 他入狱10年自学数学,如今凭借手稿发了篇论文,被同行评价“足以开辟数论新领域”...
杨净 梦晨 发自 凹非寺 量子位 报道 | 公众号 QbitAI 2010年,他因吸毒.杀人被捕入狱,被判有期徒刑25年. 在狱中,他靠自学数学打发时间. 没有计算机.没有老师,单靠手写.以及数学教材 ...
- 计算机数学专业是应用数学专业吗,大学数学系的数学与应用数学专业学什么课程内容?...
数学,现在大多分为纯数学和应用数学,但最终都是应用数学. 数学与应用数学是计算机专业的基础和上升的平台,是与计算机科学与技术联系最为紧密的专业之一,在计算机领域做出很好的成果的,大多是数学专业背景.在 ...
- 《程序设计技术》课程辅助学习资料
本文档提供课程相关的辅助学习资料. 阅读程序是提高程序设计水平的最为有效的方法,<程序设计技术>课程至少应该阅读后面提供链接博文中的基础部分.能够阅读完基础部分的博文,则可以给课程学习奠定 ...
- AcWing蓝桥杯AB组辅导课08、数论
文章目录 前言 一.数论 例题 例题1:AcWing 1246. 等差数列(最大公约数,第十届蓝桥杯省赛C++B第7题) 分析 题解:最大公约数 例题2:AcWing 1295. X的因子链(算数基本 ...
- 计算机网络安全课程心得,学习信息安全专业的心得体会
1.学习本专业的体会 信息安全专业是计算机.通信.数学.物理.法律.管理等学科的交叉学科,主要研究信息安全的科学与技术,培养能够从事计算机.通信.电子商务.电子政务.电子金融等领域的信息安全高级专门人 ...
- 密码学的中文入门书籍及课程推荐
密码学是一门研究如何保护信息安全的学科.一种简单轻松入门密码学的方法是学习密码学史,此处推荐书籍<密码了不起[知乎出品]>(刘巍然).这是一本密码学科普读物,通过浅显生动的例子,在不涉及复 ...
最新文章
- 稀缺:百分之二的选择
- Debug ASP.NET Core 2.0源代码
- docker小实战和应用
- [剑指offer]面试题第[28]题[Leedcode][JAVA][第101题][对称二叉树][队列][递归]
- java遍历删除原理,Java 垃圾回收机制实现原理
- shell(一)——概述、变量、运算符
- Linux系统调用表(system call table)
- comsol如何定义狄利克雷边界_如何使用拓扑优化结果创建几何模型
- android登录操作代码,Android Studio实现第三方QQ登录操作代码
- 释放摄像头_防爆摄像头在使用过程中会遇到哪些问题,如何处理
- thinkphp-where-字符串条件
- 别把量化交易变成拼人力、拼硬件、拼资源的烧钱游戏
- Linux resolv.conf 简介
- 【Pytorch】torch. bmm()
- java 上传文件-生成文件首页缩略图 生成pdf 抓取图片
- 卡尔曼滤波——从推导到应用(上)
- ghost备份与还原系统教程 如何备份系统
- easyui 监听filebox文件框选择改变事件
- unity videoplayer视频播放无声音
- 使用Elastic Stack做应用的360度全观察性监控