欧拉定理
若 (a,p) 互质,则
(a^{phi(p)} equiv 1(mod~p))
其中 (phi(p)) 表示的是小于等于 (p) 中和 (p) 互质的数的个数。
(phi(p) = p imes prod frac{s_i - 1}{s_i}) ,其中 (s_i) 为 (p) 的质因数。
不难看出,如果 (x,y) 互质,(phi(xy) = phi(x)phi(y))
扩展欧拉定理: (a) 和 (b) 可以不互质。
如果 (bgeq phi(p)) 时
(a^b equiv a^{(b~mod~phi(p))+phi(p)}~mod~p)
总结一下:
求 (a) 在 (mod~p) 意义下的逆元。
(inv[a] = a^{phi(p) - 1})
[BZOJ 3884] 上帝与集合的正确用法
求 (2^{2^{2^{2^{2^{2^{2^{dots}}}}}}} mod~p)
(1leq T leq 1000, 1leq p leq 10^7)
solution
根据欧拉扩展定理得:
(2^{2^{2^{2^{2^{dots}}}}} mod~p = 2^{2^{2^{2^{2^{dots}}}} mod~phi(p) + phi(p)}~~mod~~p= 2^{2^{2^{2^{2^{dots}}}mod~phi(phi(p)) + phi(p)} }~~mod~~pdots)
然后一直递归下去。
(phi(p)sim phi(phi(p))simphi(phi(phi(p)))dots)
(phi) 的值会越来越小,最后会变到 0,后面的 2 就不用算了,然后递归回来求解就好了。
复杂度 (O(log~p))
经典问题
给一个 (n) 需要求 (1sim n) 中与 (n) 互质的数的和。
(nleq 10^{14})
solution
由于 (gcd(a, n) = gcd(n - a, n))
所以可以把与 (n) 互质的数放在一起,肯定会两两配对,并且每次配对的和是 (n) 。
因此答案是 (n imes frac{phi(n)}{2})。
BZOJ 2190 仪仗队
求 (sum_{1leq i,jleq N}[gcd(i, j) ~is ~1])
(1leq N leq 40000)
solution
可以转化为 (2 imes (sum_{1leq ileq N}phi(i) ) - 1)
因为 (gcd(1, 1) = 1) 所以它算了两次,所以要 (-1) 。
[Codeforces 432C] Prime Swaps
给出一个长度为 (N) 的排列,每次你可以选择两个位置 (i, j~(i < j)) ,并交换上面的数,前提是 (j - i + 1) 是质数。
要求在 (5N) 次操作内,把这个序列排号。输出具体排序的操作。
(N leq 10^5)
solution
哥德巴赫猜想:任一大于 (2) 的整数都可写成三个质数的和。
别问我为什么,欧拉好像也不会
然后每个数就都可以移动到任何一个位置了。
那么每次把一个数往前移动 (x) 距离时,先移动一个尽量大的质数距离即可。
贪心从 (1,2,3,4dots) 的顺序排序即可。
由于质数密度为 (ln(N)) ,所以可以保证在 (5N) 次内一定能完成。
[BZOJ2818] GCD
求 (sum_{1leq i,j leq N} [gcd(i,j)~is~ prime])
(1 leq N leq 10^7)
solution
对于每一个质数,对答案的贡献就是 (sum_{1leq i,j leq frac{N}{p}} [gcd(i,j) = 1])。
[BZOJ2705] Longge的问题
求 (sum_{1leq i leq N} gcd(i, N))
(1 leq N leq 2^{32})
solution
主要思想时枚举一个 (N) 的因数,假设为 (5) ,那么就找出 (1sim N) 中所有与 (N) 的 (gcd)
为 (5) 的数的个数,然后乘以 (5) 就是这个因数的贡献,对每个因数做一遍就是答案。
枚举所有的 (d) ,然后用质因数分解求 (phi) 就好了。
[bzoj3813] 奇数国
一个长度为 (N) 的序列,每个数都是前 (60) 小的质数之一。
两种操作一共 (M) 个:
- 修改一个位置的数为某前 (60) 小的质数之一
- 查询一个区间乘积的 (phi) 值(对 (10^7) 取模)
(1leq N, M leq 10^5)
solution
建一棵线段树,维护区间乘积和每个素数出现的次数(二进制表示就好),然后用
(phi(p) = p imes prod frac{s_i - 1}{s_i}) 算就好了,除法要用逆元。
最大公约数与欧几里得算法
(gcd(a,b) = gcd(b, a\%b))
(lcm(a, b) = frac{ab}{gcd(a,b)})
操场是由 (n) 个格子围城的圆形,从 (1) 到 (n) 编号。
有 (m) 个同学,每个同学步长 (a_i) ,从 (1) 开始跑,求每个同学不会经过的格子数。
(mleq 10^5, n,a_i leq 10^9)
如果 (a_i) 与 (n) 互质,那么所有的格子都能踩到。
最大公约数,最小公倍数性质
扩展欧几里得
求一组不定方程。
(ax + by = gcd(a, b))
推式子得到:
(ay + b(x - lfloor frac{a}{b} floor imes y) = gcd(a, b))
一直递归到最后 (x = 1, y = 0)
中国剩余定理
若 (m_1, m_2, m_3……m_n) 是两两互质的正整数,有同余方程组
[egin{cases} x equiv a_1 (mod~m_1)\ x equiv a_2 (mod~m_2)\ ……\ x equiv a_n (mod~m_n)\ end{cases} ]求 (x) ?
证明:
根据一个定理
两数不能整除,若除数扩大(或缩小)了几倍,而被除数不变,则其商和余数也同时扩大(或缩小)相同的倍数(余数必小于除数)
(证明: 假设 a % b = d,a / b = k, a = kb + d, a - kd = d,a,b 同时扩大 z 倍,得到 z(a - kd) = zd;)
所以可以得出 (a_iM_it_i equiv a_i(mod~~m_i))
显然 $ M_i$ 除了可以 (m_i) 之外都可以整除其他 (m)
(ecause forall k ot= i,a_iM_it_i = 0(mod~m_k))
(ecause a_iM_it_iequiv a_i(~mod~m_i))
所以带入原式得到:(x = sum^{n}_{i = 1}a_iM_it_i)
整数分块
求 (sum_{i = 1}^{n}(lfloor frac{n}{i} floor)^5 imes i)
(n leq 10^9) 答案对 (10^9 + 7) 取模。
引理一:$lfloor frac {n}{i} floor $ 最多只有 (2sqrt{n}) 种不同的取值。
证明:将 (i) 分为大于等于 (sqrt{x}) 与大于 (sqrt{x}) 的两部分
- 当 (d leq sqrt{x}) 时
此时 (lfloor{frac{x}{d}} floor geq sqrt{x}),最多 (sqrt{x}) 种取值
- 当 (d > sqrt{x}) 时
(lfloor frac{x}{d} floor < sqrt{x}), 最多 (sqrt{x}) 种取值
复杂度为 (O(sqrt{x}))
引理二:所有$lfloor frac {n}{i} floor $ 相同的对应的 i 一定是一段连续的区间
反证法:如果不是连续的区间
一定存在 (l < t < r) 使得 (lfloor frac{n}{l} floor = lfloor frac{n}{r} floor) 且(lfloor frac{n}{l} floor eq lfloor frac{n}{t} floor)
(ecause t > l)
(ecause lfloor frac{n}{t} floor < lfloor frac{n}{l} floor)
(ecause t < r)
(ecause lfloor frac{n}{t} floor > lfloor frac{n}{r} floor)
所以假设不成立
引理三:对于所有连续的区间,如果知道了 l ,那么 r 也会知道
$r = lfloor{frac{n}{lfloorfrac{n}{l} floor}} floor $
证明?我不会
//f(a) = a^5;
for (int i = 1, last; i <= n; i = last + 1) {
int a = n / i;
last = n / a;
ret += f(a) * (sum[last] - sum[i - 1]);
}
[HDU 5780]
求 (sum_{1 leq a,bleq n} gcd(x^a - 1, x^b - 1))
(x, n leq 10^6)
solution
根据 (gcd) 的性质 (gcd(x^a - 1, x^b - 1) = x^{gcd(a, b)} - 1) 化简上面的式子。
得到:
(sum_{1 leq a,bleq n} x^{gcd(a,b)} - 1)
考虑枚举 (gcd(a, b))
(sum_{k=1}^{n}(x^k - 1) sum_{1leq a,bleq n}[gcd(a, b) = k])
化简得到:
(sum_{k = 1}^{n}(x^k - 1)((2sum_{i = 1}^{lfloor frac{n}{k} floor} phi(i)) -1))
卢卡斯定理
如果 (p) 是质数,有公式
(C^n_{m} equiv C_{m~mod~p}^{n~mod~p} imes C^{lfloor frac{n}{p} floor}_{lfloor frac{m}{p} floor}(mod~p))
[BZOJ 1951] 古代猪文
求 (G^{sum_{d|n} C_n^{d}}~mod~999911659)
因为 (999911659) 是个质数,由欧拉定理推论得到。
(G^{sum_{d|n} C_n^{d}}~mod~999911659 = G^{sum_{d|n} C_n^{d}~mod~999911658}~mod~999911659)
直接 (Lucas) 计算 (sum_{d|n} C_n^{d}~mod~999911658) 会挂
将 (999911658) 质因数分解,(999911658 = 2 imes 3 imes 4679 imes 35617)
枚举 (d),然后分别计算 (sum d|n~ C_n^d) 对 (2, 3, 4679, 35617) 四个质数取模的结果记作 (a_1, a_2, a_3, a_4) 。
最后用中国剩余定理求个方程组
然后快速幂求答案就好。
线性基
- 异或运算与 (01) 串
- 高斯消元
最值反演。。。。