基础数论小结(25.9.23)

基础数论

同余

  1. 自反性 \(a ≡ a (mod m)\)
  2. 对称性 \(a ≡ b (mod m)\),则 \(b ≡ a (mod m)\)
  3. 传递性 \(a ≡ b (mod m)\)\(b ≡ c (mod m)\) \(a ≡ c (mod m)\)
  4. 加减性 \(a ≡ b (mod m)\)\(c ≡ d (mod m)\) \(a±c ≡ b±d (mod m)\)
  5. 乘法性 \(a ≡ b (mod m)\)\(c ≡ d (mod m)\) \(a*c ≡ b*d (mod m)\)
    \(k * a ≡ k * b (mod m)\)
  6. 乘方性 \(a ≡ b (mod m)\)\(a^n ≡ b^n (mod m)\)
  7. 模的缩放 \(a ≡ b (mod m)\)\(d\)\(m\) 的约数 \((d | m)\) , 则 \(a ≡ b (mod d)\)

余数性质

  1. 余的分配性 (a+b+c+d) % r = { (a%r)+(b%r)+(c%r)+(d%r) }%r
    a = x*k1+r ......

    (a+b+c+d)%r = x(k1+k2+k3+k4) + R = 0 + R%r = { (a%r)+(b%r)+(c%r)+(d%r) }%r

  2. 余的分配性(2) (a * b * c * d) % r = {(a%r) * (b%r) * (c%r) * (d%r) }%r
    = ( (a%r) * (b%r) ) %r ......

  3. 涉及除数的式子 (b / c)%m = (b * (c的逆元)) %m

    因为一开始写的时候不会Latex,所以这里写的很烂,能补的尽量补了

欧几里得

  1. 我们通过设x为a,b的公约数,可以通过等式发现gcd(a,b) == gcd(b,a%b)
    所以我们可以通过此,使用递归,求得答案
  2. 因为除法可能会爆 ll,故我们尝试使用,更相减损术求得答案
  3. \(2|a\) \(2|b\) \(gcd(a,b) = 2gcd(a/2,b/2)\)
  4. \(2|a\) 或者 \(2|b\)

gcd的应用

可以知道,两个数之间gcd可以直接logn求取,那么多个数呢
很明显,若求得的gcd,放在数组里继续求并不冲突
所以:\(gcd(a,b,c) = gcd(gcd(a,b),c)\)

还可以通过设质数的方去得知,\(gcd(a,b) * lcm(a,b) = a*b\)
多个数的lcm,也可以通过与gcd同样方法求取

扩展欧几里得

ax + by = gcd(a,b)的递归法求解

通过推导可以解得:
\(𝑥1 =𝑦2\)
\(𝑦1 =𝑥2 −⌊𝑎/𝑏⌋𝑦2\)
之后直接通过不断向下递归,直至x=1,y=0(得知了有几层)
向上寻找回代

int Exgcd(int a, int b, int &x, int &y) {
if (!b) {
 x = 1;
 y = 0;
 return a;
}
int d = Exgcd(b, a % b, x, y);
int t = x;
x = y;
y = t - (a / b) * y;
return d;
}

ax + by = gcd(a,b)的迭代法求解

与递归法的式子是不同的
\(𝑥 =1,𝑦 =0,𝑥1 =0,𝑦1 =1\)
\(𝑎𝑥+𝑏𝑦=𝑎\)
\(𝑎𝑥1+𝑏𝑦1=𝑏\)

​ $ 𝑎𝑥1+𝑏𝑦1=𝑏$
\(𝑎(𝑥−𝑞𝑥1)+𝑏(𝑦−𝑞𝑦1)=𝑎−𝑞𝑏\)

int gcd(int a, int b, int& x, int& y) {
x = 1, y = 0;
int x1 = 0, y1 = 1, a1 = a, b1 = b;
while (b1) {
 int q = a1 / b1;
 tie(x, x1) = make_tuple(x1, x - q * x1);
 tie(y, y1) = make_tuple(y1, y - q * y1);
 tie(a1, b1) = make_tuple(b1, a1 - q * b1);
}
return a1;
}

拓展欧几里得应用

  1. 求模逆元
    \(ax\equiv1 ( \mod(m) )\)

    x 是 𝑎 在模 𝑚 意义下的 逆元

    所以可以将线性同余方程换为:\(ax + my = gcd(a,m) \rightarrow ax \mod(m) + my\mod(m) = gcd(a,m)mod(m)\)

    所以还可以化简为

    \(ax mod(m) = gcd(a,m) mod(m) \rightarrow ax\equiv \gcd(a,m) ( mod(m) )\)

    最后

    设:\(ax+my = 1 (gcd(a,m) = 1)\)

    并且求解

  2. 求同余线性方程

    \(ax = b(mod (n))\)
    分为两种情况

    第一种\(a,n\) 互质,说明 \(a\) 在模 \(n\) 的意义下有逆元(参照上面,\(gcd(a,n)\)为1,说明互质)

    \(x = b * (a的逆元)(mod n)\)

    第二种\(a,n\)不互质,

    \(gcd (a,n) = d\)

    考虑两种情形:

    1. 当 𝑑 不能整除 𝑏 时,方程无解

    2. 当可以整除时,将\(a,b,n\)都除b
      \(𝑎′𝑥≡𝑏′(mod𝑛′)\)

      \(gcd(a' , n') = 1\)

      便可以解得\(d = gcd(a,n)\)

      总答案数 = d

      其过程证明主要为:\(a(x' + 𝑘𝑛′)mod(n) = bmod(n)\)

      然后证明 在\(k<d-1\)时,总共有d个解 \(x = x' + kn'\)

posted @ 2025-09-23 20:44  Yuriha  阅读(11)  评论(0)    收藏  举报