qbxt 数论基础笔记

欧拉定理

若 \(a,p\) 互质,则

\(a^{\phi(p)} \equiv 1(mod~p)\)

其中 \(\phi(p)\) 表示的是小于等于 \(p\) 中和 \(p\) 互质的数的个数。

\(\phi(p) = p\times \prod \frac{s_i - 1}{s_i}\) ,其中 \(s_i\) 为 \(p\) 的质因数。

不难看出,如果 \(x,y\) 互质,\(\phi(xy) = \phi(x)\phi(y)\)

扩展欧拉定理: \(a\) 和 \(b\)​ 可以不互质。

如果 \(b\geq \phi(p)\) 时

\(a^b \equiv a^{(b~mod~\phi(p))+\phi(p)}~mod~p\)​

总结一下:

\[a^b \equiv \begin{cases} a^{b~mod~\phi(p)}~~~~~~~~~~~~~~~gcd(a,p) = 1\\ a^b~~~~~~~~~~~~~~~~~~~~~~~~~~~gcd(a,p) \neq 1,b < \phi(p) (mod~p)\\ a^{(b~mod~\phi(p)) + \phi(p)}~~~~~~gcd(a, p) \neq 1, b \geq \phi(p) \end{cases} \]

求 \(a\) 在 \(mod~p\)​ 意义下的逆元。

\(inv[a] = a^{\phi(p) - 1}\)

[BZOJ 3884] 上帝与集合的正确用法

求 \(2^{2^{2^{2^{2^{2^{2^{\dots}}}}}}} mod~p\)

\(1\leq T \leq 1000, 1\leq 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~~p\dots\)​

然后一直递归下去。

\(\phi(p)\sim \phi(\phi(p))\sim\phi(\phi(\phi(p)))\dots\)

\(\phi\) 的值会越来越小,最后会变到 0,后面的 2 就不用算了,然后递归回来求解就好了。

复杂度 \(O(log~p)\)

经典问题

给一个 \(n\) 需要求 \(1\sim n\) 中与 \(n\) 互质的数的和。

\(n\leq 10^{14}\)

solution

由于 \(gcd(a, n) = gcd(n - a, n)\)

所以可以把与 \(n\) 互质的数放在一起,肯定会两两配对,并且每次配对的和是 \(n\) 。

因此答案是 \(n\times \frac{\phi(n)}{2}\)。

BZOJ 2190 仪仗队

求 \(\sum_{1\leq i,j\leq N}[gcd(i, j) ~is ~1]\)​

\(1\leq N \leq 40000\)

solution

可以转化为 \(2\times (\sum_{1\leq i\leq 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,4\dots\) 的顺序排序即可。

由于质数密度为 \(ln(N)\) ,所以可以保证在 \(5N\) 次内一定能完成。

[BZOJ2818] GCD

求 \(\sum_{1\leq i,j \leq N} [gcd(i,j)~is~ prime]\)

\(1 \leq N \leq 10^7\)

solution

对于每一个质数,对答案的贡献就是 \(\sum_{1\leq i,j \leq \frac{N}{p}} [gcd(i,j) = 1]\)​​。

[BZOJ2705] Longge的问题

求 \(\sum_{1\leq i \leq N} gcd(i, N)\)

\(1 \leq N \leq 2^{32}\)

solution

主要思想时枚举一个 \(N\) 的因数,假设为 \(5\) ,那么就找出 \(1\sim N\) 中所有与 \(N\) 的 \(gcd\)

为 \(5\) 的数的个数,然后乘以 \(5\) 就是这个因数的贡献,对每个因数做一遍就是答案。

\[\sum_{1\leq i \leq N} gcd(i, N)\\ = \sum_{d|N}d\sum_{1 \leq i \leq \frac{N}{d}}[gcd(i, \frac{N}{d}) = 1]\\ = \sum_{d|N}d\phi(\frac{N}{d}) \]

枚举所有的 \(d\) ,然后用质因数分解求 \(\phi\) 就好了。

[bzoj3813] 奇数国

一个长度为 \(N\) 的序列,每个数都是前 \(60\) 小的质数之一。

两种操作一共 \(M\) 个:

  • 修改一个位置的数为某前 \(60\) 小的质数之一
  • 查询一个区间乘积的 \(\phi\) 值(对 \(10^7\) 取模)

\(1\leq N, M \leq 10^5\)

solution

建一棵线段树,维护区间乘积和每个素数出现的次数(二进制表示就好),然后用

\(\phi(p) = p\times \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\) 开始跑,求每个同学不会经过的格子数。

\(m\leq 10^5, n,a_i \leq 10^9\)

如果 \(a_i\)​ 与 \(n\)​ 互质,那么所有的格子都能踩到。

最大公约数,最小公倍数性质

\[lcm(s) = \prod_{T\subset S, T\notin \emptyset} gcd(T)^{(-1)^{|T| - 1}}\\ gcd(Fib(a), Fib(b)) = Fib(gcd(a, b))\\ gcd(x^a - 1, x^b - 1) = x^{gcd(a, b)} - 1 \]

扩展欧几里得

求一组不定方程。

\(ax + by = gcd(a, b)\)

推式子得到:

\(ay + b(x - \lfloor \frac{a}{b} \rfloor \times y) = gcd(a, b)\)

一直递归到最后 \(x = 1, y = 0\)

中国剩余定理

若 \(m_1, m_2, m_3……m_n\) 是两两互质的正整数,有同余方程组

\[\begin{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\)

\(\because \forall k \not= i,a_iM_it_i = 0(mod~m_k)\)

\(\because a_iM_it_i\equiv a_i(~mod~m_i)\)

所以带入原式得到:\(x = \sum^{n}_{i = 1}a_iM_it_i\)

整数分块

求 \(\sum_{i = 1}^{n}(\lfloor \frac{n}{i}\rfloor)^5 \times i\)​​

\(n \leq 10^9\) 答案对 \(10^9 + 7\) 取模。

引理一:$\lfloor \frac {n}{i} \rfloor $​ 最多只有 \(2\sqrt{n}\)​ 种不同的取值。

证明:将 \(i\) 分为大于等于 \(\sqrt{x}\) 与大于 \(\sqrt{x}\) 的两部分

  • 当 \(d \leq \sqrt{x}\) 时

此时 \(\lfloor{\frac{x}{d}}\rfloor \geq \sqrt{x}\),最多 \(\sqrt{x}\)​ 种取值

  • 当 \(d > \sqrt{x}\) 时

\(\lfloor \frac{x}{d} \rfloor < \sqrt{x}\), 最多 \(\sqrt{x}\) 种取值

复杂度为 \(O(\sqrt{x})\)

引理二:所有$\lfloor \frac {n}{i} \rfloor $ 相同的对应的 i 一定是一段连续的区间

反证法:如果不是连续的区间

一定存在 \(l < t < r\)​ 使得 \(\lfloor \frac{n}{l}\rfloor = \lfloor \frac{n}{r}\rfloor\)​ 且\(\lfloor \frac{n}{l}\rfloor \neq \lfloor \frac{n}{t}\rfloor\)​

\(\because t > l\)

\(\because \lfloor \frac{n}{t}\rfloor < \lfloor \frac{n}{l}\rfloor\)​

\(\because t < r\)

\(\because \lfloor \frac{n}{t}\rfloor > \lfloor \frac{n}{r}\rfloor\)​

所以假设不成立

引理三:对于所有连续的区间,如果知道了 l ,那么 r 也会知道

$r = \lfloor{\frac{n}{\lfloor\frac{n}{l}\rfloor}}\rfloor $

证明?我不会

//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,b\leq 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,b\leq n} x^{gcd(a,b)} - 1\)

考虑枚举 \(gcd(a, b)\)

\(\sum_{k=1}^{n}(x^k - 1) \sum_{1\leq a,b\leq n}[gcd(a, b) = k]\)

化简得到:

\(\sum_{k = 1}^{n}(x^k - 1)((2\sum_{i = 1}^{\lfloor \frac{n}{k}\rfloor} \phi(i)) -1)\)

卢卡斯定理

如果 \(p\) 是质数,有公式

\(C^n_{m} \equiv C_{m~mod~p}^{n~mod~p}\times C^{\lfloor \frac{n}{p}\rfloor}_{\lfloor \frac{m}{p} \rfloor}(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~999911659}~mod~999911659\)

直接 \(Lucas\) 计算 \(\sum_{d|n} C_n^{d}~mod~999911659\) 会挂

将 \(999911659\) 质因数分解,\(999911659 = 2\times 3\times 4679 \times 35617\)

枚举 \(d\),然后分别计算 \(\sum d|n~ C_n^d\) 对 \(2, 3, 4679, 35617\) 四个质数取模的结果记作 \(a_1, a_2, a_3, a_4\) 。

最后用中国剩余定理求个方程组

\[\begin{cases}x \equiv a_1 (mod~2)\\x \equiv a_2 (mod~4679)\\x \equiv a_3(mod~4679~)\\x \equiv a_4 (mod~35617)\\\end{cases} \]

然后快速幂求答案就好。

线性基

  • 异或运算与 \(01\) 串
  • 高斯消元

最值反演。。。。

上一篇:线性方程的迭代方法


下一篇:AcWing算法提高课数学部分