一、取模运算

(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是正整数。这样的分解称为 的标准分解式

(2)一个大于1的正整数N,如果它的标准分解式为:  ,那么它的正因数个数为

  。
 
 
(3) 它的全体正因数之和
 
, 并证明

 


有待更新//...

noip数学的更多相关文章

  1. Noip数学整理

    目录 Noip数学整理 序 1 取模相关 2 质数相关 3.基本操作 4.方程相关 5.数列相关 6.函数相关 Noip数学整理 序 因为某些原因, Noip对于数学方面的考纲仅停留在比较小的一部分, ...

  2. NOIp 数学知识点总结

    推荐阅读 NOIp 基础数论知识点总结: https://www.cnblogs.com/greyqz/p/number.html 排列组合 常用公式 排列:\[\displaystyle A_n^m ...

  3. 【模板】【学习笔记】noip数学

    一.素数 欧拉筛 void prime(){ check[]=; ;i<=n;i++){ if(!check[i])prim[++cnt]=i;//这个if语句后面没有大括号!! ;j<= ...

  4. NOIP数学相关模板整理

    $O(n)$递推求逆元 #include<cstdio> #include<cstring> #include<algorithm> using namespace ...

  5. NOIp 数学 (小学奥数)

    Basic knowledge \[ C_n^m=\frac{n!}{m!(n - m)!} \] 快速幂 // Pure Quickpow inline int qpow(int n, int m, ...

  6. NOIp 基础数论知识点总结

    推荐阅读 NOIp 数学知识点总结: https://www.cnblogs.com/greyqz/p/maths.html Basic 常用素数表:https://www.cnblogs.com/g ...

  7. Collections 索引

    About Me NOIp 数据结构专题总结 NOIp 图论算法专题总结 NOIp 基础数论知识点总结 NOIp 数学知识点总结 搜索算法总结 (不包含朴素 DFS, BFS) 位运算 字符串算法总结 ...

  8. NOIP复习之1 数学数论

    noip一轮复习真的要开始啦!!! 大概顺序是这样的 1.数学 2.搜索贪心 3.数据结构 4.图论 5.dp 6.其他 数学 1.数论 数论被称为数学皇冠上的明珠,他的重要性主要在于它是其他学习的祖 ...

  9. 数学相关【真·NOIP】

    数论相关 上来就不会的gcd相关.见SCB他威胁我去掉了一个后缀的blog好了:https://blog.csdn.net/suncongbo/article/details/82935140(已经过 ...

随机推荐

  1. java基础之IO流(二)之字符流

    java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...

  2. Ubuntu 16.04安装CrossOver容器来安装QQ(终极解决办法,亲测有效)

    说明:此版本的QQ基本完美,但是有个缺点就是历史记录有些会显示乱码! 注意:此方法能完美解决这篇文章http://www.cnblogs.com/EasonJim/p/7118693.html的所有问 ...

  3. SQL Server 存储字符数较大字段的问题

    SQL Server 2000专门提供了处理text,ntext,image字段的函数,他们是: TEXTPTR TEXTVALID READTEXT UPDATETEXT WRITETEXT 一般作 ...

  4. Android中的多线程编程(一)附源代码

    Android中多线程编程:Handler类.Runnable类.Thread类之概念分析 1.Handler类: Handler是谷歌封装的一种机制:能够用来更新UI以及消息的发送和处理.Handl ...

  5. 碰撞检測之OBB-OBB的SweepTest

    提要 当物体在运动的时候.普通的每帧进行碰撞检測已经无法满足要求,比方子弹的运动 两帧的位置已经直接将中间的板子穿过了,所以 t 时刻和 t +1 时刻的检測都是失效的.这时候须要用到的就是sweep ...

  6. 初探STL之算法

    算法 STL算法部分主要由头文件<algorithm>,<numeric>,<functional>组成.要使用 STL中的算法函数必须包括头文件<algor ...

  7. SolidEdge 工程图中如何控制是否显示爆炸图组装线

    右击视图,点击性质,取消勾选"显示流线"   即可取消爆炸视图的装配线              

  8. 华夏互联总经理汪照发接受程序猿杂志专訪-2014年6月江西IDC排行榜

     作为软件开发界最权威的期刊,<程序猿>杂志一直是业界推崇的高端读物,能被其採訪是极大的荣耀. 上个月,作为江西省内的排名第一的站点开发企业和专业的站点研发厂商,Zoomla!逐浪CM ...

  9. nc和telnet配合使用

    nc -l 9932 -c  用nc监听9932端口 telnet 180.150.184.115 29933  telnet 29932 端口

  10. HTML制作练习