基础
更简单的就不说了。
a. 逆元
定义a.1:满足 的 称为 的逆元
推论a.1.1:当满足 时,逆元存在。
可用费马小定理或 exgcd 求解。
b. 积性函数
定义b.1:在数论中,若函数 满足 ,且 对任意互质的 都成立,则 为 积性函数。
定义b.2:在数论中,若函数 满足 且 对任意的 都成立,则 为 完全积性函数。
-
常见积性函数:。
-
完全积性函数:。
b.1. 性质
-
性质b.1.1:若 为积性函数,那么 也为积性函数。
-
性质b.1.2:若 为积性函数,那么 也为积性函数。
c. 迪利克雷卷积
定义c.1:
推论c.2:若 为积性函数,那么 为积性函数。
推论c.2:若 为完全积性函数,那么 为完全积性函数。
推论c.3:
-
-
(莫比乌斯反演)
-
(欧拉反演)
-
(综上可证)
道阻且长….
1. 费马小定理&欧拉定理
1.1. 费马小定理
定理1.1.1:当存在整数 和质数 时,那么:
定理1.1.2:当整数 和质数 并且 时,那么:
推论1.1.3:。读者自证不难。
证明1.1:oi-wiki.
看下文可以知道,费马小定理是欧拉定理的特殊情况。
1.2. 欧拉定理
定义1.2.1:当 ,且 时有: 。
证明1.2.1:https://zhuanlan.zhihu.com/p/452185813
这里 是数论中的欧拉函数。。
:详见 4.1。
推论1.2.2:。
1.2.4 阶
定义1.2.4.1:若存在最小非负整数满足 ,则称 为 模 的阶,记为 。
根据欧拉定理,显然要满足 。
定理1.2.4.2:,则。
证明1.2.4.2:设 ,其中 ,由于 最小,所以 。所以 。
于是只能为,得证。
定理1.2.4.3: 模 意义下两两不同余。
证明1.2.4.3:考虑反证,假设存在两个数 ,且 ,则有 .但是显然的有:,这与阶的最小性矛盾,故原命题成立。
所以当 时,。
定理1.2.4.4: 为整数,那么 的充要条件是 。
证明1.2.4.4:不会。
1.2.5 原根
定义1.2.5.1:满足的,称 为模 的原根。
原根个数:。
原根判定:设 的质因数为 ,那么 是 原根的充要条件是:对于任意 ,满足 。
证明:充分性显然。必要性不会
存在原根,当且仅当 或 ,其中 为大于 的质数。
证明不会。
1.3. 扩展欧拉定理
定义1.3.1:当 时有:
2. 裴蜀定理
定义2.1: 非零整数,则对于任意整数 使得 ,存在整数 使得 。
推广2.1:多个数也成立。
推论2.2:若 互质,则存在整数 使得 。
证明2.2:设 ,其中 为可能的最小正整数。即证 。
假设不成立,则 ,可得 。由于 为整数,所以 为比 更小的正整数,与 为可能的最小正整数不符,所以假设不成立,。
3. 扩展欧几里得算法
扩展欧几里得算法常用于求 的可行解。
以下是算法原理。
设
由欧拉定理()可得:
根据模的定义转换下,得:
再转换。
现在, 可以通过 来求了:
而 可以通过 来求,而 可以通过 来求…..
很容易想到,递归。
我们把 转换一下,可得:
用扩展欧几里得算法求出 , 就是 在模 意义下的逆元。
int exgcd(int a , int b){ //返回值是 gcd(a,b)
int ret = exgcd(b , a % b);
inline pair <ll , ll> exgcd(ll a , ll b){ //不要gcd返回值
if(b == 0) return make_pair(1 , 0);
pair <ll , ll> ret = exgcd(b , a % b);
return make_pair(ret.second , ret.first - (a / b) * ret.second);
4. 欧拉函数
4.1定义:对于正整数 。欧拉函数是小于 的正整数中与 互质的数的个数。表示为 。
其中欧拉函数是积性函数。笔者证明很难。
可以质因数分解来求。
for(int i = 2;i * i <= x;i++) if(x % i == 0){
while(x % i == 0) x /= i;
if(x > 1) ret -= ret / x;
4.2. 性质
-
4.2.1:设 。
当 均有质因子 时,。
否则 。
证明:
可通过其,用线性筛来求。
int ppp[500005] , phi[500005] , cnt;
for(int i = 2;i <= 10000000;i++){
if(!vis[i]) phi[i] = i - 1 , ppp[++cnt] = i;
for(int j = 1;j <= cnt && i * ppp[j] <= 10000000;j++){
phi[i * ppp[j]] = phi[i] * ppp[j];
phi[i * ppp[j]] = phi[i] * phi[ppp[j]];
-
4.2.2:(积性函数)
-
4.2.3:
-
4.2.4:
5. 筛法
5.1. 线性筛
bool p[N];int ppp[N] , cnt;
for(int i = 2;i <= N;i++){
if(!p[i]) ppp[++cnt] = i;
for(int j = 1;j <= cnt && ppp[j] * i <= N;j++){
if(i % ppp[j] == 0) break;
可以考虑预处理出比 小的第一个质数,可以把分解质因数优化成 。
for(int i = 2;i <= N;i++){
if(!vis[i]) ppp[++cnt] = i , minp[i] = i;
for(int j = 1;j <= cnt && ppp[j] * i <= N;j++){
minp[ppp[j] * i] = min(minp[ppp[j]] , minp[i]);
if(i % ppp[j] == 0) break;
积性函数基本可以用线性筛求。
5.2. 埃氏筛
for(int i = 2;i <= n ;i++)
for(int j = i + i;j <= n;j += i)
5.3. 杜教筛
用于在非线性时间内求积性函数前缀和。
假如求 。
那么尝试找出一个合适的积性函数 。它们的迪利克雷卷积的前缀和为:
那么 。
代码如下:
int GetSum(int n) { // 算 f 前缀和的函数
int ans = f_g_sum(n); // 算 f * g 的前缀和
for(int l = 2 , r;l <= n;l = r + 1){
ans -= (g_sum(r) - g_sum(l - 1)) * GetSum(n / l);// g_sum 是 g 的前缀和
复杂度为 。
6. 中国剩余定理
常用于求
的最小可行解。
6.1. 求解
前提: 两两互质。
核心思路是把求出 个辅助解 ,每个 满足:
最后的可行解就是:。
现在考虑求出每组 。
对于 ,设 为可以整除 的 的乘积,于是我们可以知道:。
移项得:。
因为 互质,所以有解(裴蜀定理),然后方程可以用扩欧求解,或者看成逆元也行。
ll CRT(ll a[15] , ll m[15]){
for(int i = 1;i <= n;i++)
for(int i = 1;i <= n;i++){
ll t = (x + m[i]) % m[i];
ret += mmm * t * a[i] % M;
6.2. exCRT
处理 不互质的情况。
可以考虑合并两个同余式子。有:
那么:,移项得
令 ,我们可以用 exgcd 求出方程 的一组解,那么:
于是 ,然后一个个合并直到剩下一个即可。
ll m0 , r0; scanf("%lld%lld" , &m0 , &r0); n--;
ll m , r; scanf("%lld%lld" , &m , &r);
ll x = (exgcd(m0 / d , m / d).first + t) % t;
r0 = (r0 + mul(mul((r - r0) / d , x , t) , m0 , t)) % t;
m0 = t; //mul(a,b,MOD) 慢速乘
7. 反演
7.1. 莫比乌斯函数
定义7.1.1:
推论7.1.2:
莫比乌斯函数为积性函数。
7.1.3. 莫比乌斯变换
- 形式a:,那么有
证明a:已知 ,欲证
证毕。
- 形式b:,那么有
7.2. 欧拉反演
7.3. 反演技巧
构造函数强行反演:
假如求
那么提前求出所有 。
再令
于是 。
下面给出模板 :
for(int i = 1;i <= N;i++) f[i] = xx; //预处理f
for(int i = 1;i <= N;i++) for(int j = i + i;j <= N;j += i)
例题:
P4449 于神之怒加强版
那么设
所以
反演
预处理 前缀和,数列分块求解。
扩展:
不是求和怎么办??
同理
于是 。
杂项
a. 排列组合
定义a.1: 表示从 里选 个进行排列的方案数。
定义a.2:
定义a.3: 表示从 中选 个(不考虑顺序)的方案数。
定义a.4:
推论a.5:。不难发现,此乃杨辉三角。
理论到实际
zbj 问题
每个数值域为 , 个数单增的数量为
不降的是 。
个 zbj 放到 个箱子中,每个箱子至少一个,。
个 zbj 放到 个箱子中,可以先每个箱子放一个,所以。
数论分块
用于求
for(int l = 1 , r;l <= n;l = r + 1){
ret += (r - l + 1) * (n / l);
斐波那契数列
定义
推导
设
根据 得:
解得:
分别带回 :
显然数列 为等比数列,公差为 或 。则:
然后
得
性质
由上可以发现:
( 指黄金分割比 )
所以通项公式可以写成:
时间复杂度相关
代换法
直觉
所以
带回原式
时成立。
主公式
内容
证明
小公式
当 是正奇数时
对于
当 时,设有理数根 ( 互质)。
除 时,余数是 。