• 数论笔记整理


    整除

    详细请点击这里

    定义

    若 $ a = bk $ , 其中 $ a in Z, b in Z, k in Z $, 则称 $ b $ 整除 $ a $ , 记做 $ b | a $.
    也称 $ b $ 是 $ a $ 的约数(因数), $ a $ 是 $ b $ 的倍数

    性质

    ((1)) $ 1 $ 整除任何数 $ ( 1 | k ) , k in Z$ , $ 0 $ 被任何数整除 $ ( k | 0), k in Z $
    ((2)) 若 $ a | b $ 且 $ a | c $, 则 $ a | (b + c), a | (b - c)$
    ((3)) 若 $ a | b $, 则对于任意整数 $ c $ , $ a | bc $
    ((4)) 传递性:若 $ a | b $ 且 $ b | c $ , 则 $ a | c $
    ((5)) 有待添加(其实是太多了,不想证)

    例题

    [CF 762A] k-th divisor

    质数和合数

    详细请点击这里

    定义

    质数又称素数(下文中不区分质数和素数)
    设 $ p in Z_+ $
    ((1)) 当且仅当 $ p > 1 $ 且只能被 $ 1 $ 和 $ p $ 整除(即 $ p $ 仅有两个因子 $ 1 $ 和 $ p $ ), 则称 $ p $ 是一个质数;
    ((2)) 否则, 若 $ p > 1 $ , 则称 $ p $ 是一个合数;
    ((3)) 当 $ p = 1 $, $ p $ 既不是质数也不是合数.

    性质

    ((1)) 质数有无穷多个.
    ((2)) 若 $ n $ 是一个合数, 则 $ n $ 至少有一个质因子.
    ((3)) 若 $ n $ 是一个合数, 其中最小的质因子一定不大于 $ sqrt n $
    ((4)) 若 $ n $ 是一个合数, 不大于 $ n $ 的质数约有 $ dfrac{n}{ln n} $ 个.

    唯一分解定理

    把正整数 $ n $ 写成质数的乘积
    $ n = p_1^{a_1}p_2^{a_2}p_3^{a_3}...p_k^{a_k} $, 其中 $ p_i $ 为质数, $ a_i $ 为正整数
    这样的表示是唯一的.

    试除法

    最简单的判断一个数(n)是否为质数的方法
    只需要从 $ 2 $ 除到 $ sqrt n$ 即可, 如果中间有整数能整除 (n)(n) 是合数, 反之 $ n $ 是质数

    例题

    [CF 776B] Sherlock and his girlfriend

    同余

    详细请点击这里

    定义

    对于整数 (a, b, b > 0), 则存在唯一的整数 (q, r) 满足 (a = bq + r)
    其中 $0 leqslant r < b $。
    其中称 (q) 为商, $ r $ 为余数。
    余数用 $ a mod b $ 表示。
    若两数 (a, b) 除以 (c) 的余数相等,则称(a,b) 模 $ c $ 同余,记做 (a equiv b pmod{c})

    性质

    ((1)) $a equiv b pmod{c} Leftrightarrow c | ( a − b ) $
    推论:若 (a equiv b pmod{c}, d|c), 则 (a equiv b pmod{d})
    ((2)) 有待添加(其实是太多了,不想证)

    最大公约数

    详细请点击这里

    定义

    (a, b) 是不都为 (0) 的整数, (c) 为满足 (c | a)(c | b) 的最大整数.
    则称 (c)(a, b)的最大公约数
    记为 (gcd(m, n))((a, b))
    ((a, b) = 1), 则称 (a, b) 互质(互素)

    性质

    ((1)) ((a, a) = (0, a) = a)
    ((2))(a|b) , 则((a, b) = a)
    ((3)) ((a, b) = (a, a + b) = (a, ka + b))
    ((4)) ((ka, kb) = k imes (a, b))
    ((5)) ((a, b, c) = ((a , b), c))

    求gcd

    (GCD) 的一般公式:质因数分解
    $ a = p_1^{a_1}p_2^{a_2}p_3^{a_3}...p_k^{a_k} $
    $ b = p_1^{b_1}p_2^{b_2}p_3^{b_3}...p_k^{b_k} $
    $ (a, b) = p_1^{min(a_1, b_1)}p_2^{min(a_2, b_2)}p_3^{min(a_3, b_3)}...p_k^{min(a_k, b_k)} $

    例题

    [CF 664A] Complicated GCD
    [CF 757B] Bash’s Big Day

    欧几里得算法

    详细请点击这里

    作用

    又称辗转相除法, 迭代求两数 (gcd) 的做法

    公式

    (gcd(a, b) = gcd(b, a \% b))

    code

    递归写法
    int gcd(int a, int b) { return !b ? a : gcd(b, a % b);}
    
    二进制优化
    inline int gcd(int x, int y) {
    	int i, j;
    	if (x == 0) return y;
    	if (y == 0) return x;
    	for (i = 0;0 == (x&1); ++i) x >>= 1;
    	for (j = 0;0 == (y&1); ++j) y >>= 1;
    	if(j<i) i = j;
    	while (1) {
    		if (x < y) x ^= y , y ^= x , x ^= y;
    		if (0 == (x -= y)) return y << i;
    		while (0 == (x & 1)) x >>= 1;
    	}
    }
    

    裴蜀定理

    详细请点击这里

    定义

    ((a, b) = d), 则对于任意整数 (x, y), 有 (d | (ax + by)) 成立;
    特别地, 一定存在 (x, y) 满足 (ax + by = d).
    等价的表述:不定方程 (ax + by = c (a, b, c) 为整数 ()) 有解的充要条件为 ((a, b) | c)

    推论

    (a,b) 互质等价于 (ax + by = 1) 有解

    扩展欧几里得

    详细请点击这里

    定义

    就是如何求得 (ax + by = d) 的一个解, (d = (a, b))

    做法

    考虑使用欧几里得算法的思想, 令 (a = bq + r), 其中 (r = a mod b)
    递归求出 (bx + ry = d) 的一个解
    设求出 (bx + ry = d) 的一个解为 (x = x_0, y = y_0)
    (a = bq + r) 带入 (ax + by = d)
    (b(qx + y) + rx = d)
    (qx+y = x_0, x = y_0), 则上式成立
    (x = y_0, y = x_0 - qy_0)(ax + by = d) 的解
    递归的边界: (b = 0) 时, 令 (x = 1, y = 0).

    code

    void exgcd(int a, int b, int &x, int &y) {
    	if (b == 0) {
    		x = 1;
    		y = 0;
    		return ;
    	}
    	int q = a / b, r = a % b;
    	exgcd(b, r, y, x);
    	y -= q * x;
    }
    

    求得所有解

    先用 (exgcd) 求出任意一个解 (x = x_0, y = y_0)
    再求出 (ax + by = 0) 的最小的解
    (x = d_x = dfrac{b}{(a, b)}, y = d_y = -dfrac{a}{(a, b)})
    所有解就是 (x = x_0 + kd_x, y = y_0 + kd_y, k in Z)

    逆元

    详细请点击这里

    定义

    (ax equiv 1 pmod b) , 则称 (x)(a) 关于模 (b) 的逆元.
    常记做 (a^{-1})
    同时, 上式等价于 (ax + by = 1) (同余的性质)

    条件

    逆元不一定存在, 存在的充要条件是 ((a, b) = 1)

    推论

    (p) 是质数, (p) 不整除 (a), 则 (a)(p) 的逆元存在

    结论

    ([0, b)) 的范围内, (a) 关于模 (b) 的逆元(若存在), 是唯一的.

    方法

    可以用 (exgcd) 求逆元

    code

    int inv(int a, int b) {
    	int x, y;
    	exgcd(a, b, x, y);
    	return x;
    }
    

    线性求逆元

    详细请点击这里

    方法一

    递推
    假设现在要求 (i) 的逆元
    考虑带余除法, 设 (p = iq + r), 则有 (iq + r equiv 0 pmod p)
    考虑到 (p) 是质数, 因此 (r) 不为 (0), (r) 的逆元存在
    等式两边乘 (i^{-1} + r^{-1} equiv 0 pmod p)
    因此 (i^{-1} equiv -qr^{-1} equiv -lfloordfrac{p}{i} floor(p mod i)^{-1} pmod p)

    code

    inline int inv(int n) {
    	inv[1] = 1;
    	for (int i = 2; i <= n; i++ ){
    		inv[i] = (p - p / i)*inv[p % i] % p;
    	}
    }
    

    方法二

    倒推
    先求 (n!) 的逆元((exgcd) 或者之后会提到的快速幂)
    然后利用 (((k - 1)!)^{-1} equiv k imes (k!) ^{-1} pmod p)
    倒推求出 (1!...n!) 的逆元
    再利用 (k^{-1} equiv (k - 1)! imes (k!)^{-1} pmod p)
    就可以求出 (1...n) 的逆元了

    code

    不想写其实是我没用过,一直用的递推

    费马小定理

    详细请点这里

    定义

    (a^{p - 1} equiv 1 pmod p)
    变式: $a^{p - 2} equiv dfrac{1}{a} pmod p Leftrightarrow a imes a^{p - 2} equiv 1 pmod p $

    前提

    (p) 是质数, 且 (a) 不是 (p)的质数

    方法

    直接快速幂取模就行

    code

    inline ll f_pow(ll x, ll y, int mod) {
    	ll ans = 1;
    	while (y) {
    		if (y & 1) ans = (ans * x) % mod;
    		x = (x * x) % mod;
    		y >>= 1;
    	}
    	return ans;
    }
    inline int fermat(int a, int mod) {
    	return f_pow(a, mod - 2);
    }
    

    线性同余方程

    详细请点这里

    定义

    形如 (ax equiv c pmod b) 的方程称为线性同余方程
    等价于 (ax + by = c) 因此有解条件为 ((a, b) mid c)

    求解

    任意的线性同余方程总可以判定为无解,或化为 (x equiv a pmod m) 的形式

    线性同余方程组 && 中国剩余定理 && 欧拉定理

    不想写了,之后再写,先挂一个大佬的链接吧
    大佬

  • 相关阅读:
    tp5出现“continue“ targeting switch is equivalent to “break“. Did you mean to use “continue 2“?错误解决方法
    composer报错Installation failed, reverting ./composer.json to its original content
    bootstrapTable自增序列号
    Linux向github添加公钥
    Git 提示fatal: remote origin already exists 错误解决办法
    bootstrapTable自定义模板
    tp5报错strpos(): Nonstring needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the cu
    vim 操作指令
    中国历史纪年简表
    在VBA中使用Word格式
  • 原文地址:https://www.cnblogs.com/lieberdq/p/13271744.html
Copyright © 2020-2023  润新知