一、取模运算

(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. 扰动函数和拉链法模拟HashMap的存储结构

    HashMap是Map接口下面的子孙,它对外是K,V结构存储的,而内部也着自己的存储结构,它的get操作是O(1)的时间复杂度,可以说是非常快的找到目录,而添加时,也是O(1),所以在键值存储里,它成 ...

  2. 连接mysql报错 : The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone...

    time zone 时区错误 DBEAVER连接MySQL运行报错The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or repres ...

  3. Spark学习(三): 基本架构及原理

    Apache Spark是一个围绕速度.易用性和复杂分析构建的大数据处理框架,最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一,与Hadoop和St ...

  4. Spring拦截器从Request中获取Json格式的数据

    7 package com.newpp.core.interceptor; 8 9 import java.io.BufferedReader; 10 import java.io.ByteArray ...

  5. 【面试 struts2】【第三篇】struts2的问题

    1.struts2的工作流程 1>客户端浏览器发出HTTP请求. 2>根据web.xml配置,该请求被FilterDispatcher接收 3>根据struts.xml配置,找到需要 ...

  6. jinjia2模板学习

    http://docs.jinkan.org/docs/jinja2/templates.html#

  7. BUPT复试专题—比较奇偶数(2010)

    https://www.nowcoder.com/practice/188472f474d5421cb8218b8ad561023b?tpId=67&tqId=29636&rp=0&a ...

  8. Solidworks工程图如何使用,替换图纸格式模板文件

    1 如果你有了图纸模板(SLDDRW文件),比如下面的这个文件,则以后把零件的三维图拖放到里面就可以了.注意,这是最简单,最有效的方法,后面另存为的slddrt文件不好使,所以还不如把模板文件另存为S ...

  9. 高速查询hive数据仓库表中的总条数

    Author: kwu 高速查询hive数据仓库中的条数.在查询hive表的条数,通常使用count(*).可是数据量大的时候,mr跑count(*)往往须要几分钟的时间. 1.传统方式获得总条数例如 ...

  10. maven插件介绍之maven-jar-plugin

    maven-jar-plugin 插件的maven依赖为: <dependency> <groupId>org.apache.maven.plugins</groupId ...