zoukankan      html  css  js  c++  java
  • qbxt 数论基础笔记

    欧拉定理

    (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^b equiv egin{cases} a^{b~mod~phi(p)}~~~~~~~~~~~~~~~gcd(a,p) = 1\ a^b~~~~~~~~~~~~~~~~~~~~~~~~~~~gcd(a,p) eq 1,b < phi(p) (mod~p)\ a^{(b~mod~phi(p)) + phi(p)}~~~~~~gcd(a, p) eq 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)

    (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) 就是这个因数的贡献,对每个因数做一遍就是答案。

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

    枚举所有的 (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)​ 互质,那么所有的格子都能踩到。

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

    [lcm(s) = prod_{Tsubset S, T otin 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} 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)

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

    [egin{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)
    • 高斯消元

    最值反演。。。。

  • 相关阅读:
    遗传算法
    UVa 11584 Partitioning by Palindromes
    UVa1625 Color Length
    UVa10003 Cutting Sticks
    UVa1347 Tour
    UVa116 (单向TSP,多决策问题)
    uVa 12563 Jin Ge Jin Qu
    模糊综合评判
    Python进阶(5)_进程与线程之协程、I/O模型
    Python进阶(4)_进程与线程 (python并发编程之多进程)
  • 原文地址:https://www.cnblogs.com/Arielzz/p/15141260.html
Copyright © 2011-2022 走看看