清北学堂—2020.1提高储备营—Day 4 morning(数论)
qbxt Day 4 morning
——2020.1.20 济南 主讲:李奥
目录一览
1.一些符号与基本知识
2.拓展欧几里得,逆元与欧拉定理
3.线性筛法与积性函数(非重点)
总知识点:数论
一、一些符号和基本知识
1.数论常用符号
(1).(x,y):x与y的最大公因数,即gcd(x,y)
(2).[x,y]:x与y的最小公倍数,即lcm(x,y)
(3).x≡y(mod n):x与y在模n意义下同余
(4).Def:定义(define)
(5).Thm:定理(theorem)
(6). ⇔:等价(充分必要条件)
(7).a|b:表示a整除b,即b是a的倍数,a是b的因子
2.基本知识
(1)快速幂
计算a^k mod n
时间复杂度O(log(k))
inline long long power(long long a, long long k){
int ans=1;
while(k){
if(k&1)ans=ans*a%n;
k>>=1;
a=a*a%n;
}
return ans;
}
(2)辗转相除法(欧几里得算法):计算x,y的最小公倍数
时间复杂度O(log(max(x,y)))
inline int gcd(int x,int y){
if(y==0)return x;
return gcd(y,x%y);
}
二、拓展欧几里得算法
1.内容:一定存在整数a,b,使得ax+by=(x,y)
2.证明过程:
gcd(x,y)->gcd(y,x%y)
gcd(x,y)->gcd(y,x-⌊x/y⌋y)
如果已知a’y+b’(x- ⌊x/y⌋ y)=(x,y)
整理得b’x+(a’-b’⌊x/y⌋)y=(x,y)
最底层:x’=(x,y),y’=0
显然有1x’+0y’=(x,y)
于是可以递归求出a,b
3.代码:
inline int exgcd(int x,int y,int &a,int &b){
if(y==0){
a=1;
b=0;
return x;
}
int aa,bb,ans;
ans=exgcd(y,x%y,aa,bb);
a=bb;b=aa-bb*(x/y);
return ans;
}
三、逆元
1.Def: 如果xy≡1(mod n),则在模n意义下,y为x的逆元,记为x-1
如果逆元存在,逆元有什么用?
x在模n意义下逆元是否存在?
∃y∈Z, xy≡1(mod n) ⇔ ∃ y, ∃y∈Z ,k∈Z xy+kn=1 ⇔ (x,n)=1
Thm:x在模n意义有逆元当且仅当(x,n)=1
2.计算方法:直接使用exgcd
其它计算方法:
线性求逆元
设n是一个质数,那么1到n-1都与n互质,因此1到n-1在模n意义下都有逆元(1的逆元为1)
对x(1<x<n)求逆元
设a=⌊n/x⌋,b=n%x
n=ax+b
b=-ax
b-1b=-b-1a x
1≡-b-1ax(mod n)
-b-1*a即为x的逆元
x的逆元可以用比他小的数的逆元得到
递推可以求得1到n-1在模n意义下的逆元
代码:
inv[1]=1;
for(i=2;i<=n-1;i++)
inv[i]=(n-inv[n%i]*(n/i)%n)%n;
四、欧拉定理
(1)欧拉函数φ
Def : φ(i)表示1到i中有多少个数与i互质(i∈N+)
对于质数p
φ(p)=p-1
φ(pk)=(p-1)*pk-1
(2)定理内容
若a与n互质,则aφ(n) ≡1(mod n)
推论:若a与n互质,x≡y(mod φ(n)),则ax≡ay(mod n)
aφ(n)≡1(mod n)
a*aφ(n)-1≡1(mod n)
aφ(n)-1 即为a在模n意义下的逆元
当n为质数时,a的逆元为an-2
五.积性函数
(1)Def:对于一个定义域为N+或是1到n的函数f(x),如果满足以下两条性质,称其为积性函数
1.f(1)=1
2.∀a,b∈N+ ,若(a,b)=1,则f(a)f(b)=f(ab)
Def:对于一个定义域为N+或是1到n的函数f(x),如果满足以下两条性质,称其为完全积性函数
1.f(1)=1
2.∀a,b∈N+ , 则f(a)f(b)=f(ab)
(2)常见的积性函数举例
Id:单位函数,Id(x)=x
Idk:幂函数,Idk (x)=xk
φ:欧拉函数
μ:莫比乌斯函数
∊:单元函数 ∊(1)=1, ∊(x)=0(∀x≥2)
1:1(x)=1 (∀x≥1)
d:d(x)表示x的约数个数
(3)
线性筛积性函数
对于积性函数f
在较小时间复杂度内算出f(pk)
对于含有多个质因子的数x,记录x除尽MinP[x]因子后的值,记为w[x]
代码:
f[1]=1;
for(i=2;i<=n;i++){
int j=i/MinP[i];
if(MinP[j]==MinP[i]) w[i]=w[j];
else w[i]=j;
if(w[i]==1){
//i为pk,直接计算
}
else f[i]=f[w[i]]*f[i/w[i]];
}
--------------------------------------------------THE END-------------------------------------------------
清北学堂—2020.1提高储备营—Day 4 morning(数论)的更多相关文章
- 清北学堂—2020.1提高储备营—Day 4 afternoon(动态规划初步(一))
qbxt Day 4 afternoon --2020.1.20 济南 主讲:顾霆枫 目录一览 1.动态规划初步 2.记忆化搜索 3.递推式动态规划 4.记忆话搜索与递推式动态规划的转化 5.状态转移 ...
- 清北学堂—2020.1提高储备营—Day 3(图论初步(二))
qbxt Day 3 --2020.1.19 济南 主讲:李奥 目录一览 1.图论(kruskal算法,最短路径算法,拓扑排序) 总知识点:图论 一.kruskal算法 1.目的:求图的最小生成树 2 ...
- 清北学堂—2020.1提高储备营—Day 3(图论初步(一))
qbxt Day 3 --2020.1.19 济南 主讲:李奥 目录一览 1.图论(图.图的存储方式.最小生成树的定义) 总知识点:图论 前言:众所周知,图论是一个非常重要的部分,而这次集训也可以算从 ...
- 清北学堂—2020.1提高储备营—Day 2 afternoon(线段树、树状数组)
qbxt Day 2 afternoon --2020.1.18 济南 主讲:李佳实 目录一览 1.线段树 2.二叉搜索树(略过) 3.树状数组 总知识点:基础数据结构(本人初学感觉好难) 一.线段树 ...
- 清北学堂—2020.1提高储备营—Day 1 morning(模拟、枚举、搜索)
qbxt Day 1 morning --2020.1.17 济南 主讲:李佳实 目录一览 1.模拟和枚举 2.基础搜索算法(DFS.BFS.记忆化搜索)以及进阶搜索算法(纯靠自学) 总知识点:基础算 ...
- 清北学堂—2020.1提高储备营—Day 2 morning(并查集、堆)
qbxt Day 2 morning --2020.1.18 济南 主讲:李佳实 目录一览 1.并查集 2.堆 总知识点:基础数据结构 一.并查集 1.描述:并查集是一类十分常用的数据类型,它有着十分 ...
- 清北学堂—2020.1提高储备营—Day 1 afternoon(二分、分治、贪心)
qbxt Day 1 afternoon --2020.1.17 济南 主讲:李佳实 目录一览 1.二分法 2.分治 3.贪心 总知识点:基础算法 一.二分法 (1)算法分析:二分法是一种暴力枚举的优 ...
- 清北学堂—2020.3NOIP数学精讲营—Day 1 morning 重点笔记
qbxt Day 1 morning 重点笔记 --2020.3.8 济南 主讲:钟皓曦 1 正数%负数==正数 负数%正数==负数 负数%负数==负数 a%b的答案的符号取决于a的符号. 2 快速幂 ...
- 清北学堂 2020 国庆J2考前综合强化 Day7
目录 1. 题目 T1 魔力石 题目描述 Sol T2 和 题目描述 Sol T3 数对 题目描述 Sol T4 海豹王国 题目描述 Sol 考场策略 1. 题目 T1 魔力石 题目描述 题目描述 小 ...
随机推荐
- STVP编译时遇到no default placement for segment .FLASH_CODE
最近编译STM8S003时需要使用flash库函数,看起来简单,实则折腾了超过1天.今天总结方法如下: 1.修改stm8s.h 156行 #define RAM_EXECUTION 注释去掉 如 ...
- AWS 入门使用
AWS官方参考文档:https://docs.aws.amazon.com/s3/index.html AWS基本介绍:https://docs.aws.amazon.com/zh_cn/Amazon ...
- 视觉slam十四讲课后习题ch3-7
题目回顾: 设有小萝卜一号和小萝卜二号位于世界坐标系中,小萝卜一号的位姿为:q1=[0.35,0.2,0.3,0.1],t2=[0.3,0.1,0.1]^T (q的第一项为实部.请你把q归一化后在进行 ...
- Codeforces_490_E
http://codeforces.com/problemset/problem/490/E dfs,过程要注意细节,特别是当前位置取了与上个数当前位置相同是,若后面不符合条件,则当前位置要重置'?' ...
- 在form子句中使用子查询时的注意事项
今天中午为了弄清这个问题,本人真的是头都搞大了!最后明白了一点,在from子句中使用子查询是,一定要将临时表的别名带上,否则会灰常痛苦!!!
- qt creator源码全方面分析(2-7)
目录 Completing Code 补全代码片段 编辑代码片段 添加和编辑片段 删除片段 重置片段 补全Nim代码 Completing Code 在编写代码时,Qt Creator建议使用属性,I ...
- 用Python来自动刷智慧树网站的网课
学校最近让看什么网课,智慧树网站的,太无聊了,写个脚本刷下,这里是用Python+selenium实现的,也可以用js脚本,更简单,但是我这里刚好最近在学python,就顺便练习下,说下有几个点, 1 ...
- Python3(六) 面向对象
一.类的定义 1. class Student(): name = ' ' #定义变量 age = 0 def print_file(self): #定义函数 ...
- windows socket ipv6 SOCK_RAW
bind处一直报错WSAEADDRNOTAVAIL10049,不知道为什么? WSAEADDRNOTAVAIL 10049 Cannot assign requested address. The r ...
- 【Java编程思想读书笔记】继承中父类的初始化方式
继承中父类的初始化方式 p144页有感 一.提出问题 假设有一些类,这些类有继承关系的时候,当初始化一个子类对象,对于该类的父类而言,发生了什么呢?是仅仅只是复制了一个引用还是也会同时new一个父类对 ...