数论导论
数论导论
快速幂
求 的结果。
我们可以构造如下算法:
每次 会减半,所以时间复杂度 。
龟速乘
求 的结果。
都是 级别。
我们同样可以构造类似的算法。
时间复杂度 。
整除
。
素数
。
可以证明有无穷多个素数。
还可以证明 以内的素数个数 。
埃氏筛
每个数筛掉倍数。一个优化就是只筛素数。
时间复杂度 。
int ntp[maxn];
void ass() {
for (int i = 2; i < maxn; i++) {
if (ntp[i]) continue;
for (int j = i + i; j < maxn; j += i)
ntp[j] = 1;
}
}
欧拉筛
还是筛倍数,但是让每个数只被最小的质因子筛到。
每个数都去和之前算出来的素数相乘来标记 ntp
,
如果当前素数超过了当前数的最小质因子了,那就不再用后面的素数更新了。
时间复杂度 。
int tot;
int ntp[maxn];
int prm[maxn];
void ols() {
for (int i = 2; i < maxn; i++) {
if (!ntp[i]) prm[++tot] = i;
for (int j = 1; j <= tot && prm[j] * i < maxn; j++) {
ntp[i * prm[j]] = 1;
if (i % prm[j] == 0)
break;
}
}
}
模板题 P3383 【模板】线性筛素数
快速 算法
计 表示不包含 的因子的数的个数。
显然 。
可以 计算。
让 满足 ,那么 就计算了素数和由两个素数乘起来的合数的个数。
第二个东西显然可以 搞掉。
注意到 ,所以总复杂度就是 。
实际上 还可以取 ,后面还是可以搞,可以做到 的复杂度。
最大公约数
。
辗转相减法
。
证明:
设 ,那么 ,,所以 ,,那么有 。
反之也有 。
所以 。
辗转相除法
直接多次应用上法可以得出
。
容易发现 。
所以每一次 中有一个会减半,总复杂度为 。
exgcd
求解方程 的一组解。
考虑 gcd 的过程。
假如已经有了这样一组解:,
那我们可以构造出一组解:
满足 。
时间复杂度不变。
模板题 P5656 【模板】二元一次不定方程 (exgcd)
练习题 P1516 青蛙的约会
同余
。
容易发现有如下性质。
乘法逆元
当 且 是质数时,由费马小定理 ,可以得出 。
证明:多项式定理。
如果 不是质数,也可以看成是一个方程 ,用拓欧来解即可。
模板题 P3811 【模板】乘法逆元
线性逆元
要求多个数的逆元。
先求出前缀积,再求所有数的积的逆元,再一次往前乘就可以了。
时间复杂度 。
模板题 P5431 【模板】乘法逆元 2
欧拉定理
证明:
考虑 计数到的所有数 ,显然互不相同且与 互质。
注意到 仍然满足上一条性质。
显然这两个集合模意义下就必然是相同的了。
那么两个集合中的数之积就应相等,。
所以就能得到 了。
拓展欧拉定理
当 的时候有 。
例题 P4139 P4139 上帝与集合的正确用法
求 。
保证 是质数。
Solution
直接暴力拓欧,不会递归超过 层。
时间复杂度 。
中国剩余定理
求一个同余方程组的解集:
保证 两两互质。
设 ,那么就有
这就是该方程组的解集。
模板题 P1495 【模板】中国剩余定理(CRT)/ 曹冲养猪
练习 P2480 [SDOI2010]古代猪文(需要前置知识 Lucas)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App