初等数论重要公式总结
带余除法
所谓带余除法指的是对于所有的a,b存在唯一的k和r,使得a=kb+r成立,这里有两个关键点:
①一定存在这种k,r,使得a=kb+r成立。
②k和r是唯一的,也即不会存在第二对。
算数基本定理(质因子分解)
任意大于1的正整数都可以分解为一系列质因子的乘积,并且这种分解是唯一的,也即有以下公式成立:
其中pi指的是从小到大第i个质数。
正整数的质因子分解式是恒成立的,并且分解的结果是唯一的,实际场景中适用性很高。
素数是无穷的
反证法:
可以通过质因子分解定理来构建一个比最大素数更大的素数出来:
假设素数是有限的,那么我们可以构建这样一个数,他是所有素数的乘积+1,那么该数可以表示为下面这个形式:
显然a不是任何素数的倍数,而a的质因子分解式一定存在,所以a只能自身为质数,这与pn是最大的质数是矛盾的。也即素数是无穷的。
素数定理
该定理阐述了素数分布的一些性质,但是目前我接触很少,公式表述如下:
π(n)表示小于n的素数个数。
快速因子定理
如果a是一个合数,那么a一定有一个小于√a的真因子。所以对于寻找a的因子的算法,我们可以将时间复杂度降低到√n。
埃拉托斯特筛法
该筛法是最简单的利用素因子分解和快速因子定理得到的寻找所有素数,或者所有合数质因子的方法。
code
#include<bits/stdc++.h>
using namespace std;
int main(){std::ios::sync_with_stdio(false);vector<int> ans;int *tag=new int[100000000];//要在堆区开辟动态数组,静态区开辟不了 memset(tag,0,sizeof(int)*100000000);//学到了 for(int i=2;i<100000000;i++){if(tag[i]==1)continue;ans.push_back(i); for(int j=i;j<100000000;j+=i)tag[j]=1;}for(int i=0;i<ans.size();i++)cout<<ans[i]<<" ";return 0;
}
最小公倍数和最大公因子
①若d既是a的因子,又是b的因子,那么d是gcd(a,b)的因子;
②若m既是a的倍数,又是b的倍数,那么m是lcm(a,b)的倍数;
最大公因子
使用辗转相除法(又叫欧几里得算法)来求解最大公因子,证明使用带除余法证明,这里给出离散数学课本中的证明:
关于最大公因子还存在这样一个定理也就是设a,b不全为0,则存在整数x和y使得gcd(a,b)=xa+yb成立。
code
#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b){if(a==1)return a;if(b==1)return b;while(b){a=a%b;swap(a,b);}return a;
}
int main(){int a,b;cin>>a>>b;cout<<gcd(a,b)<<endl;
}
最小公倍数
最小公倍数求解算法可以由最大公因子算法推导出,由于a,b都可以做质因子分解,a/gcd(a,b)就是只在a中包含的因子,b/gcd(a,b)就只只在b中包含的因子,那么lcm(a,b)的质因子分解式一定要包含a和b的所有质因子,且要多于他们所包含的数量,所以lcm(a,b)=gcd(a,b)ab/(gcd(a,b)gcd(a,b));化简后得到lcm(a,b)=ab/gcd(a,b);
code
#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b){if(a==1)return a;if(b==1)return b;while(b){a=a%b;swap(a,b);}return a;
}
int main(){int a,b;cin>>a>>b;int lcm=a*b/gcd(a,b);cout<<lcm<<endl;
}
初等数论重要公式总结相关推荐
- 欧拉公式:世界上最完美的公式(上帝公式) 复变函数 、平面几何 、拓扑学、 初等数论、 物理学
参考资料 欧拉公式是什么?为什么欧拉公式被称为世界上最完美的公式?下面我们就一起来了解一下吧. 欧拉公式又称为欧拉定理,也称为尤拉公式,是用在复分析领域的公式,欧拉公式将三角函数与复数指数函数相关联, ...
- 《算法竞赛中的初等数论》(五)正文 0x50筛法(ACM / OI / MO)(十五万字符数论书)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...
- 《算法竞赛中的初等数论》(四)正文 0x40反演(ACM / OI / MO)(十五万字符数论书)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...
- 《算法竞赛中的初等数论》(三)正文 0x30 积性函数(ACM / OI / MO)(十五万字符数论书)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...
- 《算法竞赛中的初等数论》(二)正文 0x20同余(ACM / OI / MO)(十五万字符数论书)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 写在最前面:本文部分内容来自网上各大博客或是各类图书,由我个人整理,增加些许见解,仅做学习交流使用,无 ...
- 世界上最完美的公式 ----欧拉公式
欧拉公式 在数学历史上有很多公式都是欧拉(leonhard euler 公元1707-1783年)发现的,它们都叫做 欧拉公式,它们分散在各个数学分支之中. (1)分式里的欧拉公式: a^r/(a-b ...
- 初等数论--同余--MILLER-RABIN素性检测算法
初等数论--同余--MILLER-RABIN素性检测算法 博主是初学初等数论(整除+同余+原根),本意是想整理一些较难理解的定理.算法,加深记忆也方便日后查找:如果有错,欢迎指正. 我整理成一个系列: ...
- 初等数论--同余--Fermat素性检测算法(为什么每次概率改变1/2)
初等数论--同余--Fermat素性检测算法(为什么每次概率改变1/2) 为什么每次概率改变1/2 博主是初学初等数论(整除+同余+原根),本意是想整理一些较难理解的定理.算法,加深记忆也方便日后查找 ...
- java中开根号是什么函数_这真的是素数的公式!但没有什么卵用!
愚人节期间,我们哆嗒和往年一样,发了一篇愚人节的整蛊文章<素数公式发现,所有数学之谜即将揭开>,没想到大家和我们一起玩的很嗨,真是一个欢乐的愚人节. 文章中我们写出了下面这样一个公式,并说 ...
最新文章
- 【转】Scrum角色及其职责介绍
- tensorflow学习(4.loss函数以及正则化的使用 )
- python 把if 写在一行的两种方式
- JAVA进阶教学之(foreach)
- 324. Wiggle Sort II
- 如何在Web App Project 或者 Web Site Project的App_Code 内使用 Profile/ProfileCommon
- 层次分析法原理和matlab代码
- 电子传真在金融业务的应用
- 常见的几种生命周期模型及其适用范围
- 中国式危机公关9加1策略(第十三章 建立系统实用的危机管理机制)
- 流行音乐混音风格 流行音乐混音的压缩技巧
- 使用树莓派3B+ 制作一个属于自己的无线AP 无线路由器 一个Wi-Fi热点
- JVM简笔—类的加载
- 2.3 万 Star 的国产装机神器,制作可启动 U 盘
- 从经济学角度解释:为什么画家总是死后成名?
- javascript百炼成仙 第一章 掌握JavaScript基础01 初入宗门
- StarUML 3.2.2
- JDK版本和项目所用版本不匹配的问题
- Logback 配置文件这么写,TPS提高 10 倍
- python并发编程之semaphore(信号量)_python并发编程之多线程