noip2017考前基础复习——数论数学
·最大公约数 gcd
辗转相除法 gcd(a,b)=gcd(b,a%b)
int gcd(int x,int y){
if(y==) return x;
return gcd(y,x%y);
}
效率O(logn)
·最小公倍数 lcm
可由最大公约数推来 lcm(a,b)=a*b/gcd(a,b)
int lcm(int x,int y){
int p=gcd(x,y);
return a*b/p;
}
效率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'
int extgcd(int a,int b,int &x,int &y){ //返回值为gcd(a,b)
if(b==) {
x=;y=;
return a;
}
int d=extgcd(b,a%b,y,x);
y-=(a/b)*x;
return d;
}
可用于求同余方程、逆元
效率O(logn)
·素数筛
线性筛法,很好理解
由于每个合数都只会被筛掉一次,复杂度O(n)
void Get_Prime(int n){
p[]=p[]=;
cnt=;
for(int i=;i<=n;i++) p[i]=; //先标记2~n都为素数
for(int i=;i<=n;i++){
if(p[i]) prime[++cnt]=i; //i为素数
for(int j=;j<=cnt && (long long)i*prime[j]<=n;j++){
p[i*prime[j]]=; //每个合数都只被自己最小质因子筛掉
if(i%prime[j]==) break;
}
}
}
·欧拉函数 phi
求小于n与n互素的数的个数
phi[i]=i*(1-1/p1)*(1-1/p2)*(1-1/p3)…… 其中p1,p2,p3为i的质因数
可以在线性筛素数的同时求,复杂度O(n)
void get_phi(){
p[]=p[]=;cnt=;
for(int i=;i<=n;i++) p[i]=;
for(int i=;i<=n;i++){
if(p[i]==) phi[i]=i-,prime[++cnt]=i;
for(int j=;j<=cnt && (ll)i*prime[j]<=n;j++){
p[i*prime[j]]=;
if(i%prime[j]==) {
phi[i*prime[j]]=phi[i]*prime[j];
break;
}
phi[i*prime[j]]=phi[i]*(prime[j]-);
}
}
}
·快速幂
可以把幂想成一个二进制数来理解
int Power_Mod(int x,int y){ //求x的y次方
int ret=;
while(y){
if(y&) ret*=x;
x=x*x;
y>>=;
}
return ret;
}
效率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)
未完待续……
noip2017考前基础复习——数论数学的更多相关文章
- C语言基础复习总结
C语言基础复习总结 大一学的C++,不过后来一直没用,大多还给老师了,最近看传智李明杰老师的ios课程的C语言入门部分,用了一周,每晚上看大概两小时左右,效果真是顶一学期的课,也许是因为有开发经验吧, ...
- Java基础复习笔记基本排序算法
Java基础复习笔记基本排序算法 1. 排序 排序是一个历来都是很多算法家热衷的领域,到现在还有很多数学家兼计算机专家还在研究.而排序是计算机程序开发中常用的一种操作.为何需要排序呢.我们在所有的系统 ...
- 《CSS权威指南》基础复习+查漏补缺
前几天被朋友问到几个CSS问题,讲道理么,接触CSS是从大一开始的,也算有3年半了,总是觉得自己对css算是熟悉的了.然而还是被几个问题弄的"一脸懵逼"... 然后又是刚入职新公司 ...
- Java基础复习笔记系列 九 网络编程
Java基础复习笔记系列之 网络编程 学习资料参考: 1.http://www.icoolxue.com/ 2. 1.网络编程的基础概念. TCP/IP协议:Socket编程:IP地址. 中国和美国之 ...
- Java基础复习笔记系列 八 多线程编程
Java基础复习笔记系列之 多线程编程 参考地址: http://blog.csdn.net/xuweilinjijis/article/details/8878649 今天的故事,让我们从上面这个图 ...
- Java基础复习笔记系列 七 IO操作
Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...
- Java基础复习笔记系列 五 常用类
Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ...
- Java基础复习笔记系列 四 数组
Java基础复习笔记系列之 数组 1.数组初步介绍? Java中的数组是引用类型,不可以直接分配在栈上.不同于C(在Java中,除了基础数据类型外,所有的类型都是引用类型.) Java中的数组在申明时 ...
- JS基础 复习: Javascript的书写位置
爱创课堂JS基础 复习: Javascript的书写位置复习 js书写位置:body标签的最底部.实际工作中使用书写在head标签内一对script标签里.alert()弹出框.console.log ...
随机推荐
- 【t088】倒水
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 一天辰辰买了N个容量可以认为是无限大的瓶子,开始时每个瓶子里有1升水.接着辰辰发现瓶子实在太多了,于是 ...
- .data()与.detach()的区别
.data()和.detach()都可以获取Variable内部的Tensor,但.detach()更加安全 https://zhuanlan.zhihu.com/p/38475183
- 微信小程序map地图的一些使用注意事项
1.小程序组件map,在微信7.0.4以上(不包括7.0.4)层级问题官方已作更新,可在map上随意添加任何标签使用z-index即可:微信7.0.4版本以下map组件层级默认是最高的,只能使用官方提 ...
- zabbix监控mysql脚本(仅供参考)
mysql客户端添加 /etc/zabbix/zabbix_agentd.d.userparameter_mysql.conf UserParameter=mysql.version,mysql -V ...
- 【题解】CTSC1999家园(网络流)
CTSC1999家园 建模方法类似我NOI2019网络同步赛我的T1写法[[题解]NOI2019Route](70分) 问题的焦点是:空间时间载具. 考虑如何击破时间限制,可以对每个点关于每个时刻建立 ...
- $[NOIp2017]$ 宝藏 状压$dp$
\(Sol\) 觉得这里是个很巧妙的地方吖,就是记下当前扩展点集的最大深度,然后强制下一步扩展的点集都是最大深度+1.这样做在当前看可能会导致误算答案导致答案偏大,但是整个\(dp\)完成后一定可以得 ...
- VisitorPattern(访问者模式)-----Java/.Net
在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法.通过这种方式,元素的执行算法可以随着访问者改变而改变.这种类型的设计模式属于行为型模式.根据模式,元 ...
- MATLAB实例:PCA(主成成分分析)详解
MATLAB实例:PCA(主成成分分析)详解 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. 主成成分分析 2. MATLAB解释 详细信息请看: ...
- 升级添加到现有iOS Xcode项目的Flutter
如果你在2019年8月之前将Flutter添加到现有iOS项目,本文值得你一看. 在2019年7月30日,合并合并请求flutter / flutter#36793之前Flutter 1.8.4-pr ...
- 基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇
基于Netty和SpringBoot实现一个轻量级RPC框架-协议篇 前提 最近对网络编程方面比较有兴趣,在微服务实践上也用到了相对主流的RPC框架如Spring Cloud Gateway底层也切换 ...