noip2017考前基础复习——数论数学
·最大公约数 gcd
辗转相除法 gcd(a,b)=gcd(b,a%b)
1 int gcd(int x,int y){ 2 if(y==0) return x; 3 return gcd(y,x%y); 4 }
效率O(logn)
·最小公倍数 lcm
可由最大公约数推来 lcm(a,b)=a*b/gcd(a,b)
1 int lcm(int x,int y){ 2 int p=gcd(x,y); 3 return a*b/p; 4 }
效率O(logn)
·扩展欧几里得 extgcd
求ax+by=gcd(a,b)的整数对(x,y)
也可由gcd推过来
推导过程:
ax+by=gcd(a,b)=gcd(b,a%b)
假设求出 bx'+(a%b)y'=gcd(b,a%b)
那么整理可得 bx'+(a-(a/b)*b)y'=gcd(b,a%b)
ay'+b(x'-(a/b)*y')=gcd(b,a%b)=gcd(a,b)
故 x=y' y=x'-(a/b)*y'
1 int extgcd(int a,int b,int &x,int &y){ //返回值为gcd(a,b) 2 if(b==0) { 3 x=1;y=0; 4 return a; 5 } 6 int d=extgcd(b,a%b,y,x); 7 y-=(a/b)*x; 8 return d; 9 }
可用于求同余方程、逆元
效率O(logn)
·素数筛
线性筛法,很好理解
由于每个合数都只会被筛掉一次,复杂度O(n)
1 void Get_Prime(int n){ 2 p[0]=p[1]=0; 3 cnt=0; 4 for(int i=2;i<=n;i++) p[i]=1; //先标记2~n都为素数 5 for(int i=2;i<=n;i++){ 6 if(p[i]) prime[++cnt]=i; //i为素数 7 for(int j=1;j<=cnt && (long long)i*prime[j]<=n;j++){ 8 p[i*prime[j]]=1; //每个合数都只被自己最小质因子筛掉 9 if(i%prime[j]==0) break; 10 } 11 } 12 }
·欧拉函数 phi
求小于n与n互素的数的个数
phi[i]=i*(1-1/p1)*(1-1/p2)*(1-1/p3)…… 其中p1,p2,p3为i的质因数
可以在线性筛素数的同时求,复杂度O(n)
1 void get_phi(){ 2 p[0]=p[1]=0;cnt=0; 3 for(int i=2;i<=n;i++) p[i]=1; 4 for(int i=2;i<=n;i++){ 5 if(p[i]==1) phi[i]=i-1,prime[++cnt]=i; 6 for(int j=1;j<=cnt && (ll)i*prime[j]<=n;j++){ 7 p[i*prime[j]]=0; 8 if(i%prime[j]==0) { 9 phi[i*prime[j]]=phi[i]*prime[j]; 10 break; 11 } 12 phi[i*prime[j]]=phi[i]*(prime[j]-1); 13 } 14 } 15 }
·快速幂
可以把幂想成一个二进制数来理解
1 int Power_Mod(int x,int y){ //求x的y次方 2 int ret=1; 3 while(y){ 4 if(y&1) ret*=x; 5 x=x*x; 6 y>>=1; 7 } 8 return ret; 9 }
效率O(logn)
·排列组合
1)加法原理:做一件事有n类做法,第n类有m[n]种做法,总做法数为m[1]+m[2]+...+m[n]
2)乘法原理:做一件事有n个步骤,第n个步骤有m[n]中做法,总做法数为m[1]*m[2]*...*m[n]
乘法原理可以说是加法原理的特殊情况
3)容斥原理 **这很重要**
例如:求gcd(1~m,1~n)=k的数对有多少
设满足条件的数对有f(k)个
则f(k)=(m/k)*(n/k)-f(2*k)-f(3*k)-f(4*k)-……从后往前递推计算即可
4)排列:A(m,n)=m!/(m-n)! (m>n)
5)组合:C(m,n)=m!/((m-n)!*n!) (m>n)
如何求组合数?
法一:C(m,n)=C(m,n-1)*(m-n+1)/n
法二:杨辉三角 C(m,n)=C(m-1,n)+C(m-1,n-1)
·概率与数学期望
1)概率:P(A)=m/n (可理解为事件A发生的频率)
互相独立的事件A与B 满足 P(A*B)=P(A)*P(B)
2)数学期望:随机变量X的数学期望EX是所有可能的值按照概率加权的和
期望的线性性质:E(X+Y)=E(X)+E(Y)
未完待续……
转载于:https://www.cnblogs.com/lindalee/p/7788911.html
noip2017考前基础复习——数论数学相关推荐
- 2011考研数学概率论基础复习必备知识点
2010年的考研数学计算量相对比较大,题目与09年相比较难,虽然仍是考察学生的三基本,但是其中也比较注意对学生综合能力的考察.根据这些特点以及结合2010数学考试大纲,我对2011年春季基础复习概率论 ...
- 学php应该怎么学习数学,数学是怎样学好的 零基础怎么自学数学
零基础自学数学,看你什么目的学数学了?假如是为了兴趣,那你就无敌了,由于兴趣是最好的教师!假如是别的目的的话,就有针对的去学就行了. 学数学的小办法 有良好的学习兴趣,试着去培养数学得兴趣,久而久之, ...
- C++ 基础复习系列2(打印图形类(循环)经典问题类)
C++ 基础复习系列--孙不坚1208 C++ 基础复习系列1(输入输出类.调用数学函数类) C++ 基础复习系列2(打印图形类(循环).经典问题类) C++ 基础复习系列3(递归算法){Fibona ...
- 计算机专业指南知识点,考研计算机专业基础复习指南
考研计算机专业基础复习指南 考研计算机专业内容繁多,考查面广,我们在准备复习的时候,要抓住基础来进行复习.小编为大家精心准备了计算机考研复习思路解析,欢迎大家前来阅读. 计算机考研复习五点思路分析 1 ...
- python 基础复习二
这里写自定义目录标题 python 基础复习二 1.数据类型 2.数据的应用 3.数据的转换 总结 python 基础复习二 1.数据类型 最常用的数据类型有三种--字符串(str).整数(int)和 ...
- 江苏省专转本计算机教程,江苏省专转本计算机基础复习(含真题)教程.doc
江苏省专转本计算机基础 复习要点与历年真题2005年-2014年 2014.10 第一部分 复习要点 第一讲 信息技术---3 第二讲 计算机硬件------8 第三讲 计算机软件---------- ...
- CISSP考前总复习
CISSP考前总复习 转载于:https://blog.51cto.com/victorlau/59404
- AI基础:简易数学入门
0.导语 学习AI建议掌握的数学资料: 数学分析(微积分),线性代数,概率论,统计,应用统计,数值分析,常微分方程,偏微分方程,数值偏微分方程,运筹学,离散数学,随机过程,随机偏微分方程,抽象代数,实 ...
- Java基础复习笔记系列 九 网络编程
Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...
最新文章
- python debug 调试工具 pysnooper
- 13.2. Mount partition
- pyghon list指定位置插入字符的方法
- 统计决策理论2 条件分布上
- python链接mysql 判断是否成功_python连接mysql数据库并读取数据的实现
- tp5 批量更新多条记录_tp5批量导入数据库
- 学生信息管理系统中遇到的问题解析
- centos php 绑定域名,centos如何绑定域名?
- 亚信安全特邀出席2016首届国际反病毒大会
- c++中父类子类对象指针相互转换,成员函数调用方式
- Mars3D讲解视频
- oracle 数据库 去重查询
- 新技术在支付清算行业的创新应用
- Hadoop伪分布和全分布部署指南
- tenacity重试机制
- python中delta是什么意思_如何使用python计算Delta F/F?
- Word中的图片保存后变模糊(失真)的问题的有效解决方案
- 硅计算机的原理,量子计算机工作原理揭秘
- 小程序输入框字数统计
- 华东师范大学计算机科学与技术学科评估,重磅!计算机科学与软件工程学院软件工程学科在全国第四轮学科评估中获评A档...
热门文章
- [论文收集] ICSOC 2008 论文
- 面试腾讯算法:组合总和
- grep+awk+sort+wc实战
- linux下挂载和卸载的命令的用法:mount 、umount
- STM32串口+DMA使用1
- QQ采用什么传输协议?
- 前端一HTML:四: html标签
- centos7安装pyenv
- SpringCloud微服务云架构构建B2B2C电子商务平台之-(八)消息总线(Spring Cloud Bus)...
- 2018“硅谷技划”随笔(一):再论中美员工福利巨大差距的背后