【理论与解析】浅谈初等数论
::::info[作者提示]{open}
本文章内容较多,达到了惊人的
-
基础数学
-
互素与素数
-
同余方程与中国剩余定理
-
线性筛与欧拉定理 ::::
基础数学
进制、进制转换
:::align{center} 表: 各种进制在书面和代码中的表示示例 ::: ::cute-table{tuack} 进制 缩写 书面表示 代码表示 后缀表示(较少用) 二进制 \texttt{Bin} 1011_2 0b1011或0B10111011b八进制 \texttt{Oct} 752_8 0752或0o752752q或752o十进制 \texttt{Dec} 123 123123d十六进制 \texttt{Hex} \text{AF}3_{16} 0xAF3或0XAF3AF3h
位序列
| :::align{center} 表:原码、反码、补码 ::: ::cute-table{tuack} | 位序列 | 无符号整数 | 有符号(原码) | 有符号(反码) | 有符号(补码) |
|---|---|---|---|---|---|
000 |
|||||
001 |
|||||
010 |
|||||
011 |
|||||
100 |
|||||
101 |
|||||
110 |
|||||
111 |
位运算
| :::align{center} 表: 位运算符号与表示对照表 ::: ::cute-table{tuack} | 位运算 | 缩写 | 数学符号表示 | 代码符号表示 |
|---|---|---|---|---|
| 按位取反 | ~ |
|||
| 按位与 | & |
|||
| 按位或 | ||||
| 按位异或 | ^ |
例题讲解
P1441【NOIP1996 提高组】 砝码称重(强化版)
::::info[题目描述与数据范围]{open}
- 共有
n 枚砝码,重量分别为w_1,w_2,\cdots,w_n 。 - 询问可以表示出多少种非零重量?只统计重量不超过
m 的情况。 - 对于
100\% 的数据,n\leq20000,m\leq60000 。
::::
::::success[如何做这道题(题解)]{open}
假设
| ::cute-table{tuack} | 质量 | 解释一下 | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 按位 |
|||||||||||
| ^ | 四种质量,向左位移 |
||||||||||
| 结果 | 按位或的结果 |
- 有没有发现,这轮更新不需要
\mathcal O(m) ,按位或\mathcal O(1) 搞定 - m更大的情况下,也能用类似方法做到
\mathcal O(\frac{m}{64}) - 总复杂度
\mathcal O(\frac{nm}{64})≈2\text e7 ,恭喜你发明了\text{bitset} 算法 ::::
高精度
适用范围
int范围:−2,147,483,648 到2,147,483,647 long long范围:约±9\text e18 __int128范围:约±1.7\text e38 - 那如果我要你求
1000 位数乘1000 位数怎么办 -
请回忆你小学是怎么学习多位数乘法的(竖式法)
小学乘法
1 2 3 × 4 5 6 ——————————————————————— 7 3 8 (123 × 6) 6 1 5 0 (123 × 5, 末尾补一个 0) 4 9 2 0 0 (123 × 4, 末尾补两个 0) ——————————————————————— 5 6 0 8 8 (相加得到结果)伪代码
Function HighMul(lenA,lenB,A[],B[]): lenC ←lenA+lenB C[] ←[0,0,...,0] for i ←0 to lenA-1 do for j ←0 to lenB-1 do C[i+j] ←C[i+j]+A[i]*B[j] C[i+j+1] ←C[i+j+1]+C[i+j]÷10 C[i+j] ←C[i+j]%10 if C[lenC-1]=0 then lenC ←lenC-1 return lenC,C[]
整除
定义
设
基本性质
设
- 自反性:
a\mid a - 传递性:若
a \mid b,b \mid c ,则a\mid c - 线性性:若
a\mid b 且a\mid c ,则对任意整数x,y ,有a\mid (bx+cy) - 与符号无关:若
a\mid b ,则−a\mid b 且a\mid −b 。 - 比较性:若
a\mid b 且b \not = 0 ,则|a|≤|b| - 遍历对称:若
b>0 ,则当a 遍历b 的全体正因数时,\frac{b}{a} 亦然。
取整函数
定义
对于
取整函数通常指向下取整函数,此外还有四舍五入函数。
数论中不常用。注意
基本性质
设
- 基本不等式:
|x| \leq x < |x| + 1$, $|x| - 1 < x \leq |x| - 整数提出:
\lfloor x + n \rfloor = \lfloor x \rfloor + n$, $\lceil x + n \rceil = \lceil x \rceil + n - 反号关系:
\lfloor -x \rfloor = -\lceil x \rceil$, $\lceil -x \rceil = -\lfloor x \rfloor - 合并公式:
\lfloor x \rfloor + \lfloor y \rfloor \leq \lfloor x + y \rfloor \leq \lfloor x \rfloor + \lfloor y \rfloor + 1 - 等价关系
1 :n \leq x \iff n \leq \lfloor x \rfloor$, $n \geq x \iff n \geq \lceil x \rceil - 等价关系
2 :n < x \iff n < \lceil x \rceil$, $n > x \iff n > \lfloor x \rfloor
带余除法
定义
设
这样的式子称为
基本性质
设
- 整除判定:
a\mid b 当且仅当余数为0 ; - 余数遍历:相邻的
|a| 个整数除以a ,余数恰好遍历[0,a−1] ; - 商的估计:若除数
a>0 ,则商q=\lfloor \frac b a\rfloor ;若a<0 ,则商q=\lceil\frac b a\rceil ;
:::align{center} 表:编程语言中,负数的带余除法 :::
| ::cute-table{tuack} | 被除数( |
除数( |
算式 | 商( |
余数( |
|---|---|---|---|---|---|
- 计算机遵循“余数与被除数同号”规则。
| :::align{center} 表:数学界中,负数的带余除法 ::: ::cute-table{tuack} | 被除数( |
除数( |
算式 | 商( |
余数( |
|---|---|---|---|---|---|
- 计算机遵循“余数与被除数同号”规则;
- 数学界遵循“余数非负”规则(如无声明,本文章默认遵循该规则)。
互素与素数
最大公约数与最小公倍数
定义(最大公约数)
设
-
-
对任意满足
c \mid a1,c \mid a2,\cdots,c \mid an 的整数c ,有c \mid d ,则称d 为a_1,a_2,\cdots,a_n 的最大公约数,记作d =\gcd(a_1,a_2,\cdots,a_n)\quad;\quad d = (a_1,a_2,\cdots,a_n) 定义(最小公倍数)
设
a_1, a_2, \ldots, a_n 是n 个非零整数,如果正整数m 满足: -
-
对任意满足
a_1 \mid c, a_2 \mid c, \ldots, a_n \mid c 的整数c ,有m \mid c
则称
基本性质
设
- 交换律:
(a, b) = (b, a) ,[a, b] = [b, a] - 结合律:
(a, b, c) = ((a, b), c) = (a, (b, c)) ,[a, b, c] = [[a, b], c] = [a, [b, c]] - “单位元”:
(a, 0) = |a| ,[a, 1] = |a| - 与符号无关:
(a, b) = (|a|, |b|) ,[a, b] = [|a|, |b|] - 乘法提出:
(ka, kb) = |k|(a, b) ,[ka, kb] = |k|[a, b] - 幂提出:
(a^k, b^k) = (a, b)^k (其中k > 0 ),[a^k, b^k] = [a, b]^k (其中k > 0 ) - 乘积关系:
(a, b) \times [a, b] = |a \times b| \gcd 更相减损:(a, b) = (a \pm b, b) = (a, b \pm a) \gcd 辗转相除:(a, b) = (a \bmod b, b) = (a, b \bmod a) 互素
定义
设
a,b \in \mathbb Z ,若\gcd(a,b) =1 ,则称a 与b 互素(或互质),记作a\perp b 若
\gcd(a,b) \not = 1 ,则称a 与b 不互素,记作a\not \perp b 特别地,若
gcd(a_1,a_2,\cdots,a_n) = 1 ,则称a_1,a_2,\cdots,a_n 整体互素。
若任意两个
基本性质
设
- 对称性:若
a \perp b ,则b \perp a - 遍历性:若
a \perp b ,则相邻的|a| 个整数乘b 再除以a ,余数恰好遍历[0, a-1] - 与符号无关:若
a \perp b ,则-a \perp b 且a \perp -b - 乘法的保持:若
a \perp b 且a \perp c ,则a \perp bc - 倍数的约化:若
a \perp b ,c \mid a 且d \mid b ,则c \perp d - 与整除的关系:若
a \perp b 且a \mid bc ,则a \mid c
例题讲解
P3951【NOIP2017 提高组】小凯的疑惑(强化版)
::::info[题目描述与数据范围]{open}
-
某国只发行两种面值分别为
p 与q 的货币,保证p,q 互素。 -
显然有一些价格无法支付,问:
- 有多少种价格无法支付?
- 其中最贵的是多少?
-
如果无法支付的价格有无限种,输出
−1 -
对于 100\% 的数据,2\leq p,q \leq 10^9 。 :::: ::::success[如何解这道题(题解)]{open} :::align{center} 表: 可支付金额表(以p=5,q=7 为例,灰色为不可支付) ::: ::cute-table{tuack}模 p 价格 [0-4] 价格 [5-9] 价格 [10-14] 价格 [15-19] 价格 [20-24] \cdots 余 0 \color{red}0(0q) 5(0+p) 10(5+p) 15(10+p) 20(15+p) \cdots 余 1 \color{grey}1 \color{grey}6 \color{grey}11 \color{grey}16 \color{red}21(3q) \cdots 余 2 \color{grey}2 \color{red}7(1q) 12(7+p) 17(12+p) 22(17+p) \cdots 余 3 \color{grey}3 \color{grey}8 \color{grey}13 \color{grey}18 \color{grey}23 \cdots 余 4 \color{grey}4 \color{grey}9 \color{red}14(2q) 19(14+p) 24(19+p) \cdots -
p,q$ 互素,故 $\{0q,1q,2q,\cdots,(p−1)q\}$ 在模 $p$ 意义下遍历 $[0,p−1] -
至少 \mathcal O(\min(p,q)) 的方法很简单 ::cute-table{tuack}余数 解析 < < < < < 余 0 \color{red}0(0q) 5 10 15 20 \cdots 余 1 \color{gray}1 \color{gray}6 \color{gray}11 \color{gray}16 \color{red}21(3q) \cdots 余 2 \color{gray}2 \color{red}7(1q) 12 17 22 \cdots 余 3 \color{gray}3 \color{gray}8 \color{gray}13 \color{gray}18 \color{gray}23 \cdots 余 4 \color{gray}4 \color{gray}9 \color{red}14(2q) 19 24 \cdots -
每个红色数字意味着这一行它左边的金额都无法支付,右边都能支付
-
换句话说每个红色数字
\operatorname{A} 对应着⌊\frac{\operatorname{A}}{p}⌋ 个灰色数字,且最大的是\operatorname{A}-p -
故灰色数字共有
\sum_{i=1}^{p-1}⌊\frac{iq}p⌋ 个,最大的灰色数字为(p−1)q−p -
最大价格找出来了,接下来求
f(p,q)=\sum_{i=1}^{p-1}⌊\frac{iq}p⌋ -
继续之前,我们定义一下艾弗森括号:
- 易知
n = \sum_{i=1}^{+\infty} [i \leq n] - 还有当
a, b, c 都是正整数时,[a \leq \lfloor \frac{b}{c} \rfloor] = [a \leq \frac{b}{c}] = [ac \leq b]
- 因为
p \perp q ,所以\frac{ip}{q} 是整数当且仅当\frac{i}{q} 是整数,又因j < q ,所以不是,故
- 综上,
f(p,q) + f(q,p) = (p-1)(q-1) ,所以答案为\frac{(p-1)(q-1)}{2} ::::P1029【NOIP2001 普及组】最大公约数和最小公倍数问题
::::info[题目描述与数据范围]{open}
- 给定两个正整数
x_0,y_0 - 求满足以下条件的正整数对
(P,Q) 的个数:\gcd(P,Q) = x_0 \text{lcm}(P,Q) = y_0 - 对于
100\% 的数据,2\leq x_0,y_0\leq 2×10^9 ,保证x_0\mid y_0 :::: ::::success[如何解这道题(题解)]{open} - 复习一下
\gcd 和\operatorname{lcm} 的性质:P \times Q = \gcd(P, Q) \times \operatorname{lcm}(P, Q) = x_0 \times y_0 - 设
P = x_0 \times a ,Q = x_0 \times b - 则
\gcd(a, b) = 1 且x_0 \times y_0 = P \times Q = x_0^2 \times a \times b - 题目可修改为:令
n = \frac{y_0}{x_0} ,有多少对(a, b) 满足\gcd(a, b) = 1 且a \times b = n - 设
n 的质因数分解为n = p_1^{\alpha_1} p_2^{\alpha_2} \cdots p_k^{\alpha_k} ,则答案为2^k ::::素数
定义
设
p \in \mathbb{Z}^+ 且p > 1 ,若p 的正因数只有1 和p 本身,则称p 为 素数(或质数)否则,称p 为 合数
特别地,
基本性质
设
- 整除性:若
p \nmid a ,则\gcd(p, a) = 1 - 整除性推广:若
p \mid a_1 a_2 \ldots a_n ,则存在某个i 使得p \mid a_i - 素性判定:若对所有满足
1 < d \le \sqrt{p} 的整数d 都有d \nmid p ,则p 是素数 - 素数的个数:素数的个数是无限的(欧几里得证明)
- 标准分解式:任意大于
1 的整数n 都可以唯一地(不考虑顺序)表示为
:::align{center}
(其中
伪代码:质因数分解
Function PrimeFactorization(n):
factors[] ←[]
for i ←2 to sqrt(n) do
while n mod i=0 do
factors.append(i)
n ←n div i
if n>1 then
factors.append(n)
return factors
同余方程与中国剩余定理
同余
定义
设
此时
基本性质
设
- 自反性:
a \equiv a \pmod{m} - 对称性: 若
a \equiv b \pmod{m} , 则b \equiv a \pmod{m} - 传递性: 若
a \equiv b \pmod{m} 且b \equiv c \pmod{m} , 则a \equiv c \pmod{m} - 保加性: 若
a \equiv b \pmod{m} 且c \equiv d \pmod{m} , 则a + c \equiv b + d \pmod{m} - 保乘性: 若
a \equiv b \pmod{m} 且c \equiv d \pmod{m} , 则ac \equiv bd \pmod{m} - 幂等性: 若
a \equiv b \pmod{m} , 则对任意n \in \mathbb{N}^* , 有a^n \equiv b^n \pmod{m} - 消去律: 若
ac \equiv bc \pmod{m} 且\gcd(c, m) = 1 , 则a \equiv b \pmod{m} - 与带余除法的关系:
a \equiv b \pmod{m} 当且仅当a 和b 除以m 所得余数相同
裴蜀定理
定理
设
特别地,
例如取
伪代码
扩展欧几里得算法,输入:
Function ExtendedEuclid(a,b):
if b=0 then
return abs(a),sign(a),0
g,x1,y1 ←
ExtendedEuclid(b,a mod b)
x ←y1
y ←x1-(a ÷b) ×y1
return g,x,y
- 若
|b| \neq 0 ,扩展欧几里得算法求出的可行解必定满足|x| \leq |b|, \quad |y| \leq |a| - 且代码
ExtendedEuclid(a,b)流程中,任何计算的绝对值都不超过|a| + |b| - 因此,如果
|a|, |b| \leq 10^9 ,只求解ax + by = \gcd(a, b) 中的x, y 不会爆int - 但
ax 和by 有可能证明
x_1 b + y_1 (a \bmod b)
以上证明仅在
二元一次不定方程 \& 同余方程
定义(二元一次不定方程)
- 令
d=\gcd(A,B) ,如果d \nmid C ,那么方程无解,否则两边除以d 。
解:
-
扩展欧几里得找出
\frac{A}{d} \cdot x + \frac{B}{d} \cdot y = 1 的一个任意解(x_0, y_0) -
同时,显然
\frac{A}{d} \cdot x + \frac{B}{d} \cdot y = 0 的通解为(\frac{B}{d}k, -\frac{A}{d}k), k \in \mathbb{Z} -
故原方程的通解为
(\frac{C}{d}x_0 + \frac{B}{d}k, \frac{C}{d}y_0 - \frac{A}{d}k), k \in \mathbb{Z}
逆元
定义
设
则称
此时也称
基本性质
设
- 存在性定理:
a 模m 存在逆元当且仅当\gcd(a, m) = 1 - 唯一性: 若
a 模m 的逆元存在,则它们模m 的余数相同 - 逆元的逆元: 模
m 意义下,若a 可逆则a^{-1} 也可逆,且(a^{-1})^{-1} \equiv a \pmod{m} - 乘积的逆元: 若
a 和b 均模m 可逆,则ab 也模m 可逆,且(ab)^{-1} \equiv b^{-1}a^{-1} \pmod{m} - 除法定义: 若
b 在模m 下可逆,则定义\frac{a}{b} \equiv ab^{-1} \pmod{m}
中国剩余定理
定理
设
在模
解的存在性
设
发现它是同余方程组的一个特解,即满足所有的
解的唯一性
假设
即
\text{Lucas} 定理
定义
设
其中
特别地,当
例题讲解
P2421【NOI2002】荒岛野人
::::info[题目描述与数据范围]{open}
- 岛上有
m 个环形排列的山洞,顺时针编号为0,1,\cdots,m-1 ,其中住着n 个野人。 - 第
i 个野人最初身处山洞C_i ,每年会顺时针移动距离P_i ,拥有寿命L_i 。 - 每年所有野人同时开始行动,年末同时停下来,在身处的山洞休息(中途不休息)。
- 比如第 3 年年末,野人
i 会在(C_i + 3P_i) \bmod m 号山洞休息。 - 野人
i 在第L_i 年的年末也会休息,此后他会立马人间蒸发。 - 已知任意两个野人在有生之年都没有相遇,问
m 最小是多少。 - 对于
100\% 的数据,1 \leq n \leq 15,1 \leq C_i, P_i \leq 100,0 \leq L_i \leq 10^6 ,保证答案存在且\leq 10^6 。 :::: ::::success[如何解这道题(题解)]{open} - 既然
m 这么小,那肯定是枚举m 判断是否合法 - 考虑野人
i 和野人j 相遇的条件,即存在不超过\min(L_i, L_j) 的时间t 使得:C_i + P_i t \equiv C_j + P_j t \pmod{m} - 整理得同余方程:
(P_i - P_j) t \equiv C_j - C_i \pmod{m} ::::
P13107【GCJ2019#1A】Golf Gophers
::::info[题目描述]{open}
- 这是一道交互题
- 我有一个数字
x ,它在[1, 10^7] 范围内 - 你可以提问 7 次:你指定一个
[2, 18] 范围内的数字y ,我告诉你x \bmod y - 请在 7 次提问内猜出
x 的准确大小 :::: ::::success[如何解这道题(题解)]{open} -
[2,18]$ 范围内正好有 7 个素数 $\{2,3,5,7,11,13,17\} - 把它们全乘起来,只有
510510 ,不够怎么办 - 把
2 换成16 ,把3 换成9 - 就有
12252240 了 ::::P2480【SDOI2010】古代猪文
::::info[题目描述与数据范围]{open}
- 给定
g, n ,求g^{\sum_{d|n} \binom{d}{2}} \bmod p - 其中
p = 999911659 ,是素数 - 本题需要使用费马小定理,这里提前给出:当
g 是正整数p 是素数时,有g^{p-1} \equiv 1 \pmod{p} - 对于
100\% 的数据,1\leq g,n \leq 10^9 。 :::: ::::success[如何解这道题(题解)]{open} - 本题等价于求
\sum_{d|n} \binom{n}{d} \bmod (p-1) ,后接快速幂即可 -
p-1 = 999911658 = 2 \times 3 \times 4679 \times 35617 - 计算
\sum_{d|n} \binom{n}{d} 模以上四个素数的余数,再用中国剩余定理合并 - 以最大的
35617 为例,怎么求\sum_{d|n} \binom{n}{d} \bmod 35617 ? -
- 对于每个因子
d ,套\text{Lucas} 定理求\binom{n}{d} \bmod 35617 ::::
线性筛与欧拉定理
线性筛
- 考虑求出
[2,n] 范围内所有素数 - 如果换个试除法判断,复杂度为
\mathcal O(n\sqrt{n}) - 有没有更快的方法
伪代码
Function LinearSieve(n): primes[] ←[] is_prime[] ←[true,true,...,true] for i ←2 to n do if is_prime[i] then primes.append(i) for j ←0 to primes.length-1 do if primes[j]*i>n then break is_prime[primes[j]*i] ←false if i mod primes[j]=0 then break return primes证明
设合数
c = p \times m ,其中p 是c 的最小质因子 - 完全性(每个合数至少标记一次)
当外层循环到i = m 时:
由于m 的质因子都不比p 小,
内层循环至少遍历到p_j = p
进而标记c 是合数 - 线性性(每个合数至多标记一次)
对于c 的任何其它质因子p' :
令c = p' \times m'
显然p 也是m' 的质因子,且p < p'
故当外层循环到i = m' 时
内层循环总会在到达p' 前中断
综上合数c = p \times m 由且只由p 标记
综上合数
欧拉函数
定义
设
特别地,规定
基本性质
设
- 积性函数:若
\gcd(m, n) = 1 ,则\varphi(mn) = \varphi(m)\varphi(n) ,可用中国剩余定理证明 - 素数的情形:
\varphi(p^k) = p^k - p^{k-1} = p^k \left(1 - \frac{1}{p}\right) - 一般公式:若
n = p_1^{\alpha_1} p_2^{\alpha_2} \cdots p_k^{\alpha_k} ,则\varphi(n) = \prod_{i=1}^k p_i^{\alpha_i} \left(1 - \frac{1}{p_i}\right) = n \prod_{i=1}^k \left(1 - \frac{1}{p_i}\right) - 高斯定理:
\sum_{d|n} \varphi(d) = n
证明:枚举因子d ,恰好有\varphi(d) 个不超过n 的正整数k 满足\gcd(k, n) = \frac{n}{d}
同余类
定义
设
称为
基本性质
设
- 划分性质:不同的同余类互不相交,且全体同余类的并集为
\mathbb{Z} 。 - 代表元的选取:每个同余类有无数个代表元,通常选取
0, 1, \ldots, m-1 作为标准代表元。 - 运算的良定性:在
\mathbb{Z}_m 上可定义加法和乘法:\bar{a} + \bar{b} = \overline{a+b}, \quad \bar{a} \cdot \bar{b} = \overline{ab} 这些运算与代表元的选取无关(良定义)。
- 可逆元:在
\mathbb{Z}_m 中,\bar{a} 可逆当且仅当\gcd(a, m) = 1 ,可逆元的个数为\varphi(m) 。
剩余系
定义
设
若一组整数
- 对每个
b_i ,有\gcd(b_i, m) = 1 - 当
i \neq j 时,b_i \not\equiv b_j \pmod{m}
则称
基本性质
设
- 平移不变(完全): 若
\{a_1, a_2, \dots, a_m\} 是模m 的完全剩余系,则对任意整数c ,\{a_1 + c, a_2 + c, \dots, a_m + c\} 也是 - 数乘不变(完全): 若
\{a_1, a_2, \dots, a_m\} 是模m 的完全剩余系且\gcd(k, m) = 1 , 则\{ka_1, ka_2, \dots, ka_m\} 也是 - 数乘不变(简化): 若
\{b_1, b_2, \dots, b_{\varphi(m)}\} 是模m 的简化剩余系且\gcd(k, m) = 1 , 则\{kb_1, kb_2, \dots, kb_{\varphi(m)}\} 也是 - 威尔逊定理: 若
p 为素数,则1, 2, \dots, p-1 构成模p 的简化剩余系,且有(p-1)! \equiv -1 \pmod{p}
欧拉定理
定理(欧拉定理)
若
定理(费马小定理)
若
费马小定理是欧拉定理的素数特殊情况。
费马小定理推论
若
因此,可以使用快速幂求模素数下的逆元。
证明
设与
在模
因此,这两个集合在模
每个
扩展欧拉定理
定理
设
-
若
\gcd(a, m) = 1 ,则a^b \equiv a^{b \bmod \varphi(m)} \pmod{m} -
若
\gcd(a, m) \neq 1 且b < \varphi(m) ,则直接计算a^b \pmod{m} -
若
\gcd(a, m) \neq 1 且b \geq \varphi(m) ,则a^b \equiv a^{(b \bmod \varphi(m)) + \varphi(m)} \pmod{m} 证明
-
情况一:
\gcd(a, m) = 1
由欧拉定理知a^{\varphi(m)} \equiv 1 \pmod{m} 。设b = q\varphi(m) + r ,其中0 \leq r < \varphi(m) ,则a^b = a^{q\varphi(m) + r} = (a^{\varphi(m)})^q \cdot a^r \equiv 1^q \cdot a^r = a^{b \bmod \varphi(m)} \pmod{m} -
情况二:
\gcd(a, m) \neq 1 且b < \varphi(m)
此时指数较小,直接计算a^b \bmod m 即可。 -
情况三:
\gcd(a, m) \neq 1 且b \geq \varphi(m)
设m = p_1^{\alpha_1} p_2^{\alpha_2} \cdots p_k^{\alpha_k} ,考虑a^b \pmod{p_i^{\alpha_i}} 的情况。对每个素因子
p_i^{\alpha_i} :- 若
p_i \mid a ,设a = p_i^{\beta_i} \cdot a' ,其中\gcd(a', p_i) = 1 ,则当b \geq \alpha_i 时,a^b \equiv 0 \pmod{p_i^{\alpha_i}} 。此时b \geq \varphi(m) \geq \varphi(p_i^{\alpha_i}) = p_i^{\alpha_i-1}(p_i-1) \geq \alpha_i (对素数p_i 成立),故a^b \equiv 0 \pmod{p_i^{\alpha_i}} 。而a^{(b \bmod \varphi(m)) + \varphi(m)} 同样满足指数\geq \alpha_i ,因此也\equiv 0 \pmod{p_i^{\alpha_i}} 。 - 若
p_i \nmid a ,则\gcd(a, p_i^{\alpha_i}) = 1 ,由欧拉定理知a^{\varphi(p_i^{\alpha_i})} \equiv 1 \pmod{p_i^{\alpha_i}} 。由于\varphi(p_i^{\alpha_i}) \mid \varphi(m) ,有a^{\varphi(m)} \equiv 1 \pmod{p_i^{\alpha_i}} 。设b = q\varphi(m) + r ,0 \leq r < \varphi(m) ,则a^b = a^{q\varphi(m) + r} \equiv a^r \pmod{p_i^{\alpha_i}} - 又因为
b \geq \varphi(m) ,a^r \equiv a^{r + \varphi(m)} \pmod{p_i^{\alpha_i}} (因为a^{\varphi(m)} \equiv 1 ),故a^b \equiv a^{r + \varphi(m)} = a^{(b \bmod \varphi(m)) + \varphi(m)} \pmod{p_i^{\alpha_i}} 。例题讲解
P2568 GCD
::::info[题目描述与数据范围]{open}
- 若
-
令
P 表示所有素数构成的集合 -
给定正整数
n ,求有多少对1 \leq x, y \leq n 满足\gcd(x, y) \in P -
对于
100\% 的数据,1 \leq n \leq 10^7 。 :::: ::::success[如何解这道题(题解)]{open}\text{Ans} &= \sum_{\substack{p \in P\\p\leq n}} \sum_{i=1}^{n} \sum_{j=1}^{n} [\gcd(i,j) = p] \\ &= \sum_{\substack{p \in P\\p\leq n}} \sum_{i=1}^{\lfloor n/p \rfloor} \sum_{j=1}^{\lfloor n/p \rfloor} [\gcd(i,j) = 1] \\ &= \sum_{\substack{p \in P\\p\leq n}} \left( 2 \sum_{i=1}^{\lfloor n/p \rfloor} \sum_{j=1}^{i} [\gcd(i,j) = 1] - 1 \right) \\ &= \sum_{\substack{p \in P\\p\leq n}} \left( 2 \sum_{i=1}^{\lfloor n/p \rfloor} \varphi(i) - 1 \right) \end{aligned} 线性筛求出所有
\varphi(n) 的值 -
外层循环到
i = m -
如果
m 是素数,\varphi(m) = m - 1 -
当使用
p \times m = c 标记合数c 时:- 若
p \mid m ,则\varphi(pm) = p\varphi(m) - 若
p \nmid m ,则\varphi(pm) = (p - 1)\varphi(m) ::::P3601 签到题
::::info[题目描述与数据范围]{open} 给定
l,r ,求以下这个式子的值。\sum_{i=l}^{r} \varphi(i) \bmod 66662333 对于
100\% 的数据,1 \leq l \leq r \leq 10^{12},1 \leq r - l \leq 10^6 。 :::: ::::success[如何解这道题(题解)]{open}
- 若
-
为每个数字计算
\varphi(i) ,起始均为1 -
对于一个大合数
n ,它最多只有一个超过\sqrt n 的因子 -
线性筛得到
10^6 范围内所有素数 -
枚举上述素数
p ,再枚举l 至r 内它的所有倍数c=p\times m -
假设
c 的质因数分解包含\alpha 个p ,那这些质数会为\varphi(c) 贡献(p-1)p^{\alpha-1} -
如果
c 存在一个大质因子,上述过程中顺路求出来 -
谁能帮忙计算一下复杂度?
1+\frac 1 2+\frac 1 3+\cdots ≈ \ln n ::::P3811【模板】模意义下的乘法逆元(强化版)
::::info[题目描述与数据范围]{open}
-
给定
n, p ,其中p 是素数 -
求
1 到n 所有整数在模p 下的乘法逆元 -
对于
100\% 的数据,1 \leq n \leq 3 \times 10^6 且n < p \leq 20000528 -
请给出
\mathcal O(n) 的算法 :::: ::::success[如何解这道题(题解)]{open} -
x$ 从 $1$ 枚举到 $n$,计算 $x! \bmod p x! \equiv (x-1)! \times x \pmod{p} -
快速幂计算
(n!)^{-1} \bmod p -
x$ 从 $n-1$ 枚举到 $1$,计算 $(x!)^{-1} \bmod p (x!)^{-1} \equiv ((x+1)!)^{-1} \times (x+1) \pmod{p} -
计算所有
x^{-1} \bmod p x^{-1} \equiv x! \times ((x-1)!)^{-1} \pmod{p} ::::
P4139 上帝与集合的正确用法
::::info[题目描述与数据范围]{open}
-
第一天,上帝创造了一号数字
d_1 = 2 -
第二天,上帝创造了二号数字
d_2 = 2^{d_1} = 2^2 = 4 -
第三天,上帝创造了三号数字
d_3 = 2^{d_2} = 2^4 = 16 -
第四天,上帝创造了四号数字
d_4 = 2^{d_3} = 2^{16} = 65536 -
第五天,哦,我的上帝啊!看看这个天文数字,它简直大得不可思议——我敢说就连魔鬼本人也休想把它敲出来!
-
输入
m ,问无限号数字d_{+\infty} 模m 的余数是多少 -
对于
100\% 的数据,1 \leq m \leq 10^7 。 :::: ::::success[如何解这道题(题解)]{open} -
无限号数字特别大,套扩展欧拉定理时必定发生情况三
-
令
f(m) 表示无限号数字模m 的余数,则f(m) &= d_{+\infty} \bmod m \\ &= 2^{d_{+\infty}} \bmod m \\ &= 2^{d_{+\infty} \bmod \varphi(m) + \varphi(m)} \bmod m \\ &= 2^{f(\varphi(m)) + \varphi(m)} \bmod m \end{aligned} -
递归,边界条件
f(1) = 0 ::::致谢
\Huge \boxed{ \color{gold}{\text{Thanks}} }