猪猪的数论总结

2025-08-03
  • 小鸥定理与扩展小鸥定理
    • 小鸥定理:$a^{phi(m)} \equiv 1 \pmod m$,其中 $\gcd(m,a) = 1$
    • 扩展小鸥定理:$a^b \equiv a^{\varphi(m) + b \mod \varphi(m)} \pmod m$
    • 扩鸥定理应用:
      • 上帝与集合的正确用法扩展:求 $x$ 满足 $a^{a^{a^{a^{\cdots}}}} = x \pmod p$
      • $a^{x \mod \varphi(p) + \varphi(p)} = x$,递推即可。
      • 结论:$a^{a^{a^{a^{\cdots}}}}$ 只要递推 $O(\log p)$ 次即可求出
  • BSGS
    • BSGS 是一种将 找答案分解成小步和大步的做法。(废话)
    • 流程(以求解 $a^x \equiv b \pmod p$ 为例子):先将 x 拆成 $i \sqrt p + j$ 。然后枚举 $i$ ,查找是否存在 $j$ 使得 $b a^j \equiv a^{i \sqrt p}$。如果存在,则 $x = i \sqrt p - j$ 是一组解。判断存不存在用哈希表即可。
  • miller rabin & pollard rho
    • 二探定理:$p \in \text P$ 则 $x^2 = 1 \pmod p \Rightarrow x \equiv 1 \lor x \equiv -1 \pmod p$
    • 实例水母:
bool miller_rabin(ll n, ll a) {
 
    ll d = n - 1, r = 0;
 
    while (!(& 1)) d >>= 1, r++;
 
    ll z = f_pow(a, d, n);
 
    if (== 1)
 
        return 1;
 
    for (ll i = 0; i < r; i++) {
 
        if (== n - 1)
 
            return 1;
 
        z = (* z) % n;
 
    }
 
    return 0;
 
}
 
 
 
bool prime(ll n) {
 
    if (<= 1)
 
        return 0;
 
    for (ll i : p2) {
 
        if (== i)
 
            return 1;
 
        if (% i == 0)
 
            return 0;
 
        if (!miller_rabin(n, i))
 
            return 0;
 
    }
 
    return 1;
 
}
 
 
 
ll rho(ll n) {
 
    ll x, y, z, c, g, i, j;
 
    while (1) {
 
        x = y = rng() % n;
 
        z = 1;
 
        c = rng() % n;
 
        i = 0, j = 1;
 
        for (;; i++) {
 
            x = (* x % n + c) % n;
 
            z = (* max(- x, x - y)) % n;
 
            if (== y or !z)
 
                break;
 
            if (% 127 == 0 or i == j) {
 
                g = __gcd(n, z);
 
                if (> 1)
 
                    return g;
 
                if (== j) {
 
                    y = x;
 
                    j <<= 1;
 
                }
 
            }
 
        }
 
    }
 
}
  • 原根
    • 原根定义:满足 $1, g, g^2, g^3, \cdots, g^{phi(p)}$ 都不相同的 g。
    • 判断法:枚举 $\varphi(p)$ 的每个质因数,设当前枚举的是 c。如果 $a^{\frac{\varphi(p)}{c}} \equiv 1 \pmod p$,则 a 不是原根。
    • 原根一定小于 $n^{0.25 + \epsilon}$,求最小原根暴力枚举即可。
    • 原根存在条件:$(\exists p \in \text P \land p \mod 2 = 1, k \in \text Z), n = 2 \lor n = 4 \lor n = p^k \lor n = 2p^k$
  • 二次剩余
    • https://oi-wiki.org/math/number-theory/quad-residue/