整除与同余基础
5 个知识点整除的概念与性质、带余除法、同余概念、模运算规则
整除的概念与性质
用生活中的分东西场景引入整除的定义,讲解整除关系的性质和判断方法,并通过C++和Python代码展示如何检查一个数能否被另一个数整除。
带余除法
从分苹果剩几个的生活场景引出带余除法公式,解释商和余数的唯一性,并展示C++和Python中如何用除法和取模运算得到商和余数。
同余的概念与基本性质
从钟表周期引出同余的概念,解释同余的定义和三个基本性质(自反、对称、传递),并通过代码演示如何判断两个数是否同余。
模运算的运算规则
用分糖果的例子引出模运算的加法、减法、乘法规则,推导公式并展示C++和Python中如何利用这些规则简化大规模运算。
负数取模与溢出处理
通过温度计和借钱还钱的生活例子解释负数取模的两种定义(数学定义和编程定义),分析C++和Python的差异,并讲解大数运算中溢出的原因和解决方法。
最大公约数与欧几里得算法
6 个知识点GCD概念、辗转相除法、扩展欧几里得算法、二元一次不定方程、LCM
最大公约数的概念与求法
最大公约数是几个数公有的约数中最大的那个,通过生活中的分东西问题引入,介绍枚举法和辗转相减法等基础求法,为后续欧几里得算法做铺垫。
辗转相除法(欧几里得算法)
欧几里得算法是求最大公约数最经典的方法,通过反复取余将问题规模缩小,用故事讲解其原理和证明,并给出两种语言的实现。
扩展欧几里得算法(Exgcd)
扩展欧几里得算法不仅能求出两个数的最大公约数,还能找到整数系数x和y使得ax+by=gcd(a,b),是解不定方程的关键工具。
二元一次不定方程求解
形如ax+by=c的整数方程称为二元一次不定方程,利用扩展欧几里得算法判断是否有解并求出所有整数解,用购物凑钱等例子解释。
最小公倍数的概念与求法
最小公倍数是几个数公有的倍数中最小的那个,通过同时亮灯、遇到同一个时间点等例子引入,并给出与GCD的关系及代码实现。
GCD与LCM的综合应用
通过分蛋糕、铺地砖、周期相遇、分数化简等多个生活实例,展示最大公约数和最小公倍数在实际问题中的综合运用,并给出代码实现。
素数与素数筛法
6 个知识点素数判定、埃氏筛、线性筛、区间筛、素数分布
素数与合数的判定
从生活中的房间号码出发,讲解什么是素数、什么是合数,以及如何通过试除判断一个数是否为素数。
试除法判定素数与优化
从生活例子出发,学习如何用试除法判断一个数是否为素数,并掌握从普通试除到平方根优化、再到跳过偶数的逐步优化方法,最后用C++和Python代码实现。
埃拉托斯特尼筛法(埃氏筛)
埃拉托斯特尼筛法是一种简单高效的找质数方法,就像用筛子筛沙子一样,把合数筛掉,剩下的就是质数。
素数计数与分布
从筛苹果到数素数,我们一起来探索小于某个数到底有多少个素数,并发现素数分布的奇妙规律。
线性筛法(欧拉筛)
通过“不重复劳动”的思维,用O(n)的时间找出1到n的所有质数,每个合数只被最小质因子标记一次。
区间筛法
当我们要找的质数范围在一个很大的区间(比如 [L,R])但区间长度不大时,只用埃氏筛的思想处理 sqrt(R) 内的质数,然后筛掉区间内的合数。
质因数分解
5 个知识点算术基本定理、试除法分解、Miller-Rabin素性测试、Pollard Rho因子分解
算术基本定理(唯一分解定理)
每一个大于1的自然数,要么本身是质数,要么可以唯一地写成若干个质数的乘积,就像每个乐高模型只能用一种方式拆成基础积木块。
试除法分解质因数
从最小的质数开始依次试除,把合数拆成质因子的乘积,就像用试钥匙开锁一样简单直接。
筛法预处理与快速质因数分解
先像筛子一样把小的质数都筛出来,然后用这些质数去分解任何大数,就像先准备好工具再干活一样高效。
Miller-Rabin 大数素性测试
用随机数快速判断一个数是不是质数,虽然偶尔误判但概率极低,就像用试纸测试病毒一样快速高效。
Pollard Rho 大数因子分解
用随机游走和生日悖论,像两条蛇在数字迷宫中碰撞一样,快速找到大数的一个非平凡因子。
模逆元
5 个知识点模逆元概念、费马小定理求逆元、扩展欧几里得求逆元、线性预处理逆元
欧拉函数与欧拉定理
5 个知识点欧拉函数定义与性质、欧拉定理、扩展欧拉定理(降幂公式)
欧拉函数 φ(n) 的定义与意义
欧拉函数 φ(n) 告诉我们从1到n之间有多少个与n互质的正整数,它是数论中连接整数与模运算关系的桥梁。
欧拉函数的性质与计算公式
利用欧拉函数的乘积性和质数幂公式,我们可以直接通过分解质因数来快速计算任意正整数的欧拉函数值。
线性筛求欧拉函数
利用线性筛(欧拉筛)可以在O(n)时间内求出从1到n所有整数的欧拉函数值,非常适合批量计算。
欧拉定理与费马小定理的关系
欧拉定理是数论中关于同余模运算的重要定理,它指出当a与n互质时,a的φ(n)次方模n等于1;费马小定理是其特例。
扩展欧拉定理(降幂公式)
当底数与模数不互质时,扩展欧拉定理提供了一个降幂公式,允许我们将大指数对 φ(n) 取模后再计算,但在指数小于 φ(n) 时需要特殊处理。
同余方程与中国剩余定理
5 个知识点一元线性同余方程、中国剩余定理(CRT)、扩展中国剩余定理(ExCRT)
一元线性同余方程
一元线性同余方程是形如 `a * x ≡ b (mod m)` 的方程,它的解就是寻找一个整数x,使得a乘以x之后除以m的余数等于b。这篇文章将用时钟和排队的生活例子帮助你理解,并教你用扩展欧几里得算法编程求解。
一元线性同余方程组
一元线性同余方程组由多个形如 `x ≡ a_i (mod m_i)` 的方程组成,目标是找到同时满足所有方程的数x。我们会学习如何逐个合并方程,并解决一个简单的两方程例子,最后编程实现通用的合并方法。
中国剩余定理(CRT)
中国剩余定理(CRT)是解决一组模数两两互素的同余方程组的高效工具。它将问题转化为求每个模数对应的逆元,然后累加得到最终解。本文会从历史故事出发,给出公式证明,并编程实现。
扩展中国剩余定理(ExCRT,模不互素)
扩展中国剩余定理不要求模数互素,它通过逐步合并方程来处理任意模数的同余方程组。我们会推导合并条件,并用编程实现一个通用的合并算法。
CRT在RSA算法中的应用简介
中国剩余定理可以用于加速RSA解密过程。当你知道RSA的素数分解时,可以将模数分解为两个大素数的乘积,然后用CRT分别计算解密,速度能提升约4倍。本文简单介绍RSA原理和CRT加速的技巧。
积性函数与莫比乌斯反演
6 个知识点积性函数、莫比乌斯函数、狄利克雷卷积、莫比乌斯反演、杜教筛
积性函数的概念与判定
积性函数是一类特殊函数,满足互质的两个数乘积的函数值等于函数值的乘积;生活中就像分开计算再合并,用来简化大数的计算。
莫比乌斯函数 μ(n) 的定义与性质
莫比乌斯函数是一个取值只有 -1、0、1 的积性函数,它刻画了 n 的质因子分布,是莫比乌斯反演的基石。
狄利克雷卷积
狄利克雷卷积是数论函数之间的一种乘法运算,它将两个函数组合成新函数,为莫比乌斯反演提供了简洁的代数框架。
莫比乌斯反演公式与证明
莫比乌斯反演是数论中一对互为逆操作的变换,它通过因子求和与差补,将复杂求和转化为简单形式。
线性筛法求积性函数
线性筛(欧拉筛)可以在线性时间内求出1到n所有数的某种积性函数值,是算法竞赛中批量计算积性函数的标准方法。
杜教筛简介
杜教筛是一种利用狄利克雷卷积和整除分块快速计算积性函数前缀和的技巧,可在亚线性时间内完成计算。
组合数论
6 个知识点加法乘法原理、排列组合、二项式定理、卢卡斯定理、容斥原理、卡特兰数
加法原理与乘法原理
从生活场景出发,学习计数问题中两种最基本的原理:加法原理用于分类,乘法原理用于分步。
排列与组合的概念与计算
从选班长和排座位出发,理解有序(排列)和无序(组合)的区别,学会用公式和编程计算。
二项式定理与杨辉三角
通过展开(a+b)的幂次,发现系数规律就是杨辉三角,并学会用编程生成杨辉三角和计算二项式系数。
卢卡斯定理(Lucas)
当n和m很大(超过10^9),且模数p是质数时,用卢卡斯定理可以快速计算组合数C(n, m) mod p。
容斥原理
解决“至少满足一个条件”的计数问题,用包含排除避免重复,适用于求多个集合并集的大小。
卡特兰数的推导与应用
卡特兰数是一类在多种组合结构中出现的数列,如括号匹配、二叉树计数等,可以用递推或公式计算。
快速幂与矩阵快速幂
6 个知识点快速幂、快速幂取模、矩阵运算、矩阵快速幂、矩阵求斐波那契数列
高斯消元与线性基
4 个知识点高斯消元解方程组、异或方程组、线性基构造、线性基求异或极值
FFT与NTT
5 个知识点多项式运算、复数与单位根、FFT快速傅里叶变换、NTT数论变换
多项式的表示与基本运算
多项式就像一串带着系数的积木,加减法像搭积木,乘法像积木的卷积,我们把它们的数学原理和代码实现讲清楚。
复数与单位根
复数就像二维平面上的旋转小精灵,单位根是它们排成圆形的舞蹈队形,这是理解FFT的关键魔法。
FFT 快速傅里叶变换
FFT是多项式乘法的“加速器”,它利用分治和单位根,把O(n^2)变成O(n log n),就像让你瞬间数清一大袋糖果。
NTT 数论变换
NTT是FFT在整数模世界里的“孪生兄弟”,用原根代替复数单位根,完全避免浮点误差,适合计算精确的多项式乘法。
多项式乘法逆与NTT的综合应用
学会了NTT,我们就可以用它来实现多项式求逆、除法等高级运算,就像用万能工具做出更复杂的积木城堡。