noip数学
一、取模运算
(1)定义
给定一个正整数p和一个整数n 一定存在此等式 n=k*p+r;其中k,r是整数,r大于等于0小于p
称k是n除以p的商,r为n除以p的余数
说明:同余式 正整数a,b对p取模,它们的余数相同 记作 a≡b (mod p)
整数分为p个等价类,称为模p的剩余类
n%p所得结果的正负由n决定,与p无关。如:7%4=3,-7%4=-3,-7%-4=-3;
(2)基本性质
若p|(a-b),则a≡b (% p)。例如 11 ≡ 4 (% 7), 18 ≡ 4(% 7)
传递性:a≡b (% p),b≡c (% p),则a≡c (% p)
对称性:a≡b (% p)等价于b≡a (% p)
(3)运算规则
(a+b)%p=(a%p+b%p)%p
(a-b) %p=(a%p-b%p+p)%p //一定+p
(a*b)%p=(a%p*b%p)%p //可能会爆long long 快速乘
结合律:((a+b)%p+c)%p=(a+(b+c)%p)%p
交换律:((a+b)%p*c)=(a*c%p+b*c%p)%p
(4)重要定理:
如果a≡b (% p),则
(a+c)≡(b+c) (% p),(a*c)≡(b*c) (% p)//c是任意的
若a≡b (% p),c≡d (% p),则a+c≡b+d (% p),a-c≡b-d (% p),a*c≡b*d (% p),a/c≡b/d(% p)
(5)代码实现
//同余方程求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解
#include<iostream>
#include<cstdio>
using namespace std;
int a,b,x,y;
int gcd(int a,int b,int &x,int &y)
{
if(!b){
x=;
y=;
return a;
}
int ans=gcd(b,a%b,y,x);
y-=(a/b)*x;
return ans;
}
int main()
{
scanf("%d%d",&a,&b);
gcd(a,b,x,y);
while(x<=)x+=b;
printf("%d\n",x);
return ;
}
二、乘法逆元
(a/b)%p=???
为了方便讨论,我们只讨论正整数群上的乘法逆元。
(1)定义:
若存在正整数a,b,p,满足a*b≡1(% p),则称a是b的乘法逆元或者称b是a的乘法逆元。
在mod 7意义下,3的乘法逆元是5,在mod 6意义下2的乘法逆元是多少呢??
在mod 6意义下不存在2的乘法逆元
(2)乘法逆元存在性定理
对于ab≡1(% p),如果a与p互质,则一定存在一个正整数b满足b<p,否则不存在。
证明:对于上述同余方程,可得,ab-pk=1。对于ax+by=z,只有当z是gcd(a,b)的倍数时才有解。
所以gcd(a,p)=1,所以a,p互质时才存在b
(3)求乘法逆元
欧拉定理 费马小定理 扩展欧几里得 线性求逆元
三、欧拉函数
(1)定义
欧拉函数φ(n)表示小于等于n且与n互质的正整数的个数
特别的φ(1)=1。欧拉函数是积性函数
(2)欧拉函数公式
令n=Π(i=1-k)pi的ci次方为n的质因子分解式,则有
φ(n)=n*Π(i=1--k)(pi-1)/pi
(3)性质
a、若p为质数,则φ(p)=p-1
证明:代公式。
b、若p为质数,则φ(p^k)=(p-1)*(p^(k-1))
证明:若p是质数,在p^k内只有p的倍数不与p^k互质,p的倍数有p^k/p=p^(k-1)次方个。
则,φ(p^k)=p^k-p^(k-1)=(p-1)*p^(k-1)
c、欧拉函数是积性函数,若n,m互质,则φ(nm)=φ(n)φ(m)
d、当n是奇数时,φ(2n)=φ(2)*φ(n)=φ(n),因为此时2与n互质,满足c性质
e、若n>2,则φ(n)为偶数
证明:
①当n是质数时,φ(n)=n-1,因为n是大于2的质数,所以n一定是奇数,n-1一定是偶数
②当n是合数时,
f、当n>1时,1--n与n互质的数的和为 n*φ(n)/2
(4)欧拉定理
a^(φ(p))≡1(mod p) 对任意互质的a,p都成立
a*a^(φ(p)-1)≡1(mod p) ,然后用快速幂求乘法逆元
四、费马小定理
对于任意互质的a,p(p为质数恒成立)
a^(p-1)≡1(mod p)
费马小定理是欧拉定理在p为质数时的推论,用于降低题目难度,竞赛中常见的质数998244353,1000000009
五、欧几里得算法及扩展
(1)欧几里得算法
gcd(a,b)=gcd(b,a%b).O(logn)求两个数的最大公约数
(2)扩展欧几里得算法
扩展欧几里得用于求形如 ax+by=gcd(a,b)的一组解,保证求出的解|x|+|y|最小。
求解过程:
由ax+by=gcd(a,b)得出另一个式子,bx'+a%by'=gcd(b,a%b),
由于gcd(a,b)=gcd(b,a%b),
所以ax+by=bx'+a%by'
ax+by=bx'+(a-a/b*b)y'
ax+by=bx'+ay'-a/b*by'
ax+by=b(x'-a/by')+ay'
所以 x=y',y=x'-a/by'。
所以这个方程的x,y可以由我们构造的方程求出,这样递归下去求解。
递归边界,b=0时,此时,ax+0*y=a。所以到边界时a=1,b为任意值。(代码上b=0的,试了一下任何值都可以)
代码实现:
void exgcd(int a,int b,int &x,int &y){
if(b==){
x=;y=;
return;
}
ecgcd(b,a%b,x,y);
int t=x;x=y;y=t-a/b*y;
}
(3)扩展欧几里得求逆元
由ab≡1(% p)
则ab-k*p=1,若gcd(a,p)=1则存在b为a的逆元。
复杂度O(logn)
六、线性筛素数
(1)引入
在之前的埃拉托色尼筛素数的方法中,16这个数被2,4,8筛掉,发现一个数被多个数筛掉很不划算。
那么怎样让一个数被只被一个数筛去呢?我们可以保证每个数只被它最小的质因子筛掉。时间复杂度O(n)
(2)理解
首先推荐一篇论文,很好理解。我就不赘述。
(3)代码实现
#include<iostream>
#include<cstdio>
using namespace std;
int n,m,cnt,check[],prime[];
void Prime(int n)
{
check[]=;
for(int i=;i<=n;i++)
{
if(!check[i])
prime[++cnt]=i;
for(int j=;j<=cnt&&i*prime[j]<=n;j++)
{
check[i*prime[j]]=;
if(i%prime[j]==)break;
}
}
}
int main()
{
scanf("%d%d",&n,&m);
Prime(n);
for(int i=;i<=m;i++)
{
scanf("%d",&x);
if(!check[x])printf("Yes\n");
else printf("No\n");
}
return ;
}
七、数论函数
(1)定义
a、定义域为正整数,陪域为复数的函数称为数论函数。(对于陪域和复数的概念我不理解)
b、积性函数 对于所有互质的正整数a,b满足f(a*b)=f(a)*f(b),完全积性函数是对于所有的正整数a,b都满足上式。
(2)常见的数论函数
1、对于任意正整数x,函数值均为1
e、对于正整数x,若x=1,函数值为1,否则为0
n、对于任意正整数x函数值均为x
以上为完全积性函数。
d:对于任意正整数x,函数值为它的正因子个数
φ:对于正整数x,函数值为小于等于它且与它互质的正整数的个数
μ:对于正整数x,设正整数x的质因子分解为 x=累乘i=1--k ai^pi,若存在pi≥2则函数值
为0,否则为(-1)^k,特殊的μ(1)=1
以上为积性函数。
八、莫比乌斯反演(没补全)
(1)引入
设,有F(n)=sigma[f(d)],d|n。
例如:
F(1)=f(1)
F(2)=f(1)+f(2)
F(3)=f(1)+f(3)
F(4)=f(1)+f(2)+f(4)
F(5)=f(1)+f(5)
F(6)=f(1)+f(2)+f(3)+f(6)
F(7)=f(1)+f(7)
F(8)=f(1)+f(2)+f(4)+f(8)
可求得:
f(1)=F(1)
f(2)=F(2)-F(1)
f(3)=F(3)-F(1)
f(4)=F(4)-F(2)
f(5)=F(5)-F(1)
f(6)=F(6)-F(3)-F(2)+F(1)
f(7)=F(7)-F(1)
f(8)=F(8)-F(4)
发现了什么??
F(n)=sigma[f(d)] =》f(n)=sigma[u(d)*F(n/d)], d|n
其中μ(d)为莫比乌斯函数,给出的定义如下。
当d=1时,μ(d)=1
当d=p1*p2*p3...*pr时,μ(d)=(-1)^r,其中pi是互不相同的素数
其他情况μ(d)=0
(2)莫比乌斯函数的性质
①莫比乌斯函数是积性函数,积性函数的性质,a、f(1)=1,b、积性函数的前缀和也是积性函数。
九、BSGS
求解形如 x ^y ≡ z(mod p) 中 y 的取值的算法.
设y=km+i则原同余式为x^km+i ≡ z(mod p)=》x^i≡z*x^(-km)
Baby Step:x^i可以预处理扔进一个map
Gaint Step: 枚举k,查找是否存在z*x^(-km)
十、杨辉三角
(1)引入
杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。杨辉三角形同时对应于二项式定理的系数。
(2)杨辉三角
(3)性质
a、每个数等于它上方两数之和
b、每行数字左右对称,由1开始逐渐变大
c、第n行的数字有n项
d、第n行的数字和为2^(n-1)
e、第n行的m个数可表示为C(n-1,m-1),即从n-1个不同元素中取出m-1个元素的组合数
补充:
f、第n行的第m个数与第n-m+1个数相等
g、每个数字等于上一行的左右两个数字之和。可用此性质写出整个杨辉三角。即第n+1行的第i个数等于第n行的第i-1个数和第i个数之和,这也是组合数的性质之一。即 C(n+1,i)=C(n,i)+C(n,i-1)。
....
(4)应用
十一、质因数分解定理
(1)任何一个大于1的自然数n,如果n不为质数,那么n可以被唯一分解为有限个质数的乘积的形式,
N=P1a1P2a2P3a3......Pnan,这里P1<P2<P3......<Pn均为质数,其中指数ai是正整数。这样的分解称为 N 的标准分解式。
(2)一个大于1的正整数N,如果它的标准分解式为: ,那么它的正因数个数为
有待更新//...
noip数学的更多相关文章
- Noip数学整理
目录 Noip数学整理 序 1 取模相关 2 质数相关 3.基本操作 4.方程相关 5.数列相关 6.函数相关 Noip数学整理 序 因为某些原因, Noip对于数学方面的考纲仅停留在比较小的一部分, ...
- NOIp 数学知识点总结
推荐阅读 NOIp 基础数论知识点总结: https://www.cnblogs.com/greyqz/p/number.html 排列组合 常用公式 排列:\[\displaystyle A_n^m ...
- 【模板】【学习笔记】noip数学
一.素数 欧拉筛 void prime(){ check[]=; ;i<=n;i++){ if(!check[i])prim[++cnt]=i;//这个if语句后面没有大括号!! ;j<= ...
- NOIP数学相关模板整理
$O(n)$递推求逆元 #include<cstdio> #include<cstring> #include<algorithm> using namespace ...
- NOIp 数学 (小学奥数)
Basic knowledge \[ C_n^m=\frac{n!}{m!(n - m)!} \] 快速幂 // Pure Quickpow inline int qpow(int n, int m, ...
- NOIp 基础数论知识点总结
推荐阅读 NOIp 数学知识点总结: https://www.cnblogs.com/greyqz/p/maths.html Basic 常用素数表:https://www.cnblogs.com/g ...
- Collections 索引
About Me NOIp 数据结构专题总结 NOIp 图论算法专题总结 NOIp 基础数论知识点总结 NOIp 数学知识点总结 搜索算法总结 (不包含朴素 DFS, BFS) 位运算 字符串算法总结 ...
- NOIP复习之1 数学数论
noip一轮复习真的要开始啦!!! 大概顺序是这样的 1.数学 2.搜索贪心 3.数据结构 4.图论 5.dp 6.其他 数学 1.数论 数论被称为数学皇冠上的明珠,他的重要性主要在于它是其他学习的祖 ...
- 数学相关【真·NOIP】
数论相关 上来就不会的gcd相关.见SCB他威胁我去掉了一个后缀的blog好了:https://blog.csdn.net/suncongbo/article/details/82935140(已经过 ...
随机推荐
- 真的了解CDN服务吗?
Im CDN,WOW,COOL CDN知识详解 全称:Content Delivery Network或Content Ddistribute Network,即内容分发网络,CDN是构建在网络之上的 ...
- Wormholes(spfa判负环)
POJ - 3259—— Wormholes Time Limit: 2000MS Memory Limit: 65536KB 64bit IO Format: %I64d & % ...
- hadoop 学习(二)
我们很荣幸能够见证Hadoop十年从无到有,再到称王.感动于技术的日新月异时,希望通过这篇内容深入解读Hadoop的昨天.今天和明天,憧憬下一个十年. 本文分为技术篇.产业篇.应用篇.展望篇四部分 技 ...
- C#使用PrintDocument打印 多页 打印预览
PrintDocument实例所有的订阅事件如下: 创建一个PrintDocument的实例.如下: System.Drawing.Printing.PrintDocument docToPrint ...
- Tips/Tricks in Deep Neural Networks
转自: http://lamda.nju.edu.cn/weixs/project/CNNTricks/CNNTricks.html
- ivy在eclipse中的重新加载
ivy在eclipse中的重新加载 如果由于网速的原因,导致了ivy没有正常的加载,可以进行ivy的重新加载: 1,右键点击项目,选择属性->Java Build Path->Librat ...
- vim列块操作
一.可视模式 进入可视模式有三种方法:v,V,CTRL+V (1)按v启用可视模式,能够按单个字符选择内容,移动光标能够选择. 如: (2)按V启用可视模式,立马选中光标所在行.按单行符选择内容.移动 ...
- [Javascript] Convert a Callback-Based JavaScript Function to a Promise-Based One
Sometimes, you might want to convert a JavaScript function that accepts a callback to one that retur ...
- Java类载入器(二)——自己定义类载入器
用户定制自己的ClassLoader能够实现以下的一些应用: 自己定义路径下查找自己定义的class类文件,或许我们须要的class文件并不总是在已经设置好的Classpath以下,那么我们必须想 ...
- Multi-company rules
Object Name Domain 说明 Point of Sale Point Of Sale Order [('company_id', '=', user.company_id.id)] 指派 ...