数学与数论

数学与数论

目录

  1. 常见数学符号

  2. 数列求和

  3. 快速幂

  4. 整除

  5. 组合计数

常见数学符号

数理逻辑

  • 与、或、非

p ∧ q , p ∨ q , p ¬ q p \wedge q \text{,} p \vee q \text{,} p \neg q pqpqp¬q

  • 蕴含、等价于

p ⟹ q , p ⟺ q p \Longrightarrow q \text{,} p \Longleftrightarrow q pqpq

关系

  • 等于、不等于、约等于

a = b , a ≠ b , a ≈ b a = b \text{,} a \neq b \text{,} a \approx b a=ba=bab

  • 小于、大于、小于等于、大于等于

a < b ,  a > b ,  a ≤ b ,  a ≥ b a < b \text{, } a > b \text{, } a \leq b \text{, } a \ge b a<b a>b ab ab

  • 整除、互素、同余

a ∣ b ,  a ⊥ b ,  a ≡ b ( m o d m ) a \mid b \text{, } a \perp b \text{, } a \equiv b \pmod{m} ab ab ab(modm)

运算符

  • 加、减、乘、除

a + b , a − b , a × b , a ÷ b a + b \text{,} a - b \text{,} a \times b \text{,} a \div b a+baba×ba÷b

  • 加或减

a ± b a \pm b a±b

  • 次方

a b a ^ b ab

  • 开根

a n \sqrt[n]{a} na

  • 绝对值

∣ a ∣ \mid a \mid a

  • 取整

⌊ a ⌋ , ⌈ b ⌉ \lfloor a \rfloor \text{,} \lceil b \rceil ab

  • 取模

a   m o d   b a \bmod b amodb

  • 最值

m i n ( a , b ) , m a x ( a , b ) min(a, b) \text{,} max(a, b) min(a,b)max(a,b)

  • 最大公因数、最小公倍数

gcd ⁡ ( a , b ) , lcm ⁡ ( a , b ) \gcd(a, b) \text{,} \operatorname{lcm}(a, b) gcd(a,b)lcm(a,b)

  • 求和

∑ i = 1 n a i = a 1 + a 2 + ⋯ + a n \sum_{i = 1}^{n} a_i = a_1 + a_2 + \cdots + a_n i=1nai=a1+a2++an

  • 求积

∏ i = 1 n a i = a 1 × a 2 × ⋯ × a n \prod_{i = 1}^{n} a_i = a_1 \times a_2 \times \cdots \times a_n i=1nai=a1×a2××an

集合

  • 属于、不属于

x ∈ S , x ∉ S x \in S \text{,} x\notin S xSx/S

  • 元素个数、空集

∣ S ∣ , ∅ \mid S \mid \text{,} \emptyset S

  • 包含、真包含

A ⊆ B , A ⊂ B A \subseteq B \text{,} A \subset B ABAB

  • 并集、交集、差集

A ∪ B , A ∩ B , A ∖ B A \cup B \text{,} A \cap B \text{,} A \setminus B ABABAB

标准数集和区间

  • 自然数集、整数集、有理数集、实数集、复数集、素数集

N , Z , Q , R , C , P \mathbb{N} \text{,} \mathbb{Z} \text{,} \mathbb{Q} \text{,} \mathbb{R} \text{,} \mathbb{C} \text{,} \mathbb{P} NZQRCP

  • 闭区间、开区间、左开右闭区间、左闭右开区间

[ a , b ] , ( a , b ) , ( a , b ] , [ a , b ) [a, b] \text{,} (a, b) \text{,} (a, b] \text{,} [a, b) [a,b](a,b)(a,b][a,b)

  • 无穷大

∞ \infty

指数和对数函数

  • 自然对数

e = lim ⁡ n → ∞ ( 1 + 1 n ) n = 2.7188128 ⋯ e = \lim_{n \to \infty} (1 + \frac{1}{n}) ^ n = 2.7188128 \cdots e=nlim(1+n1)n=2.7188128

  • x x x 的以 a a a 为底的对数

log ⁡ a x \log_ax logax

  • x x x 的自然对数

ln ⁡ x \ln x lnx

  • x x x 的常用对数

lg ⁡ x \lg x lgx


数列求和

  • 等差数列求和:

假设等差数列的首项为 a 1 a_1 a1,末项为 a n a_n an,项数为 n n n,那么等差数列的和为:

S n = n ( a 1 + a n ) 2 S_n = \frac{n(a_1 + a_n)}{2} Sn=2n(a1+an)

假设等差数列的首项为 a 1 a_1 a1,项数为 n n n,公差为 d d d,那么等差数列的和为:

S n = a 1 n + n ( n − 1 ) 2 d S_n = a_1n + \frac{n(n - 1)}{2}d Sn=a1n+2n(n1)d

  • 等比数列求和:

假设等比数列的首项为 a 1 a_1 a1,项数为 n n n,公比为 q q q,那么等比数列的和为:

S n = a 1 ( 1 − q n ) 1 − q S_n = \frac{a_1(1 - q ^ n)}{1 - q} Sn=1qa1(1qn)

假设等比数列的首项为 a 1 a_1 a1,有无穷项,公比为 q q q,那么等比数列的和(若存在)为:

S n = a 1 − a n q 1 − q S_n = \frac{a_1 - a_nq}{1 - q} Sn=1qa1anq

快速幂

计算: x y m o d    z x ^ y \mod z xymodz

inline [type] qpow([type] x, int y, const int z){
    [type] ans = 1;
    while (y){
        if (y & 1) ans = ans * x % z;
        x = x * x % z, y >>= 1;
    }
    return ans;
}

整除

假设 n n n 为非负整数, d d d 为正整数, a a a b b b 为非负整数:

  • n d \frac{n}{d} dn 为整数,则称 d d d 整除 n n n,写作 d ∣ n d \mid n dn。此时 d d d 被称为 n n n约数,而 n n n 被称为 d d d倍数

  • d ∣ a d \mid a da d ∣ b d \mid b db,则称 d d d a a a b b b公约数最大公约数 a a a b b b 的所有公约数中最大的数,常记作 g c d ( a , b ) gcd(a, b) gcd(a,b)(当 g c d ( a , b ) = 1 gcd(a, b) = 1 gcd(a,b)=1 时,我们称 a a a b b b互素 关系)

辗转相除法求最大公约数

a = b × k + c a = b \times k + c a=b×k+c b b b 不能整除 a a a), d d d a a a b b b 的公约数:

∵ c = a   m o d   b < b \because c = a \bmod b < b c=amodb<b

∴ c = a − b k \therefore c = a - bk c=abk

∵ d ∣ a & d ∣ b \because d \mid a \And d \mid b da&db

∴ c d = a d − b d k \therefore \frac{c}{d} = \frac{a}{d} - \frac{b}{d}k dc=dadbk

∴ c d ∈ Z \therefore \frac{c}{d} \in \mathbb{Z} dcZ

∴ d ∣ ( a   m o d   b ) → d ∣ b & d ∣ ( a   m o d   b ) \therefore d \mid (a \bmod b) \rightarrow d \mid b \And d \mid (a \bmod b) d(amodb)db&d(amodb)

反之,假设 d ∣ b & d ∣ ( a   m o d   b ) d \mid b \And d \mid (a \bmod b) db&d(amodb),也可证明其是 a a a b b b 的公约数

可得 a a a b b b b , ( a   m o d   b ) b, (a \bmod b) b,(amodb) 的最大公约数相等
gcd ⁡ ( a , b ) = gcd ⁡ ( b , a   m o d   b ) \gcd(a, b) = \gcd(b, a \bmod b) gcd(a,b)=gcd(b,amodb)

inline [type] gcd([type] x, [type] y){
    return !y ? x : gcd(y, x % y);
}
  • a ∣ d a \mid d ad b ∣ d b \mid d bd,则称 d d d a a a b b b公倍数最小公倍数 a a a b b b 的所有公倍数中最小的数,常记作 lcm ⁡ ( a , b ) \operatorname{lcm}(a, b) lcm(a,b)

lcm ⁡ ( a , b ) = a × b gcd ⁡ ( a , b ) \operatorname{lcm}(a, b) = \frac{a \times b}{\gcd(a, b)} lcm(a,b)=gcd(a,b)a×b

inline [type] lcm([type] x, [type] y){
    return x * y / gcd(x, y);
}

素数

对于一个整数 n ≥ 2 n \ge 2 n2,若所有满足 1 < k < n 1 < k < n 1<k<n 的整数 k k k 都不是 n n n 的约数,那么称 n n n素数

判断素数

时间复杂度: O ( n ) O(\sqrt{n}) O(n )

inline bool check([type] x){
    if (x == 1) return 0;
    for ([type] i = 2; i * i <= x; ++i) if (!(x % i)) return 0;
    return 1;
}

素数的分布

定义 π ( x ) \pi(x) π(x) 表示小于等于 x x x 的素数的个数,其中:

π ( x ) ∼ x ln ⁡ ( x ) \pi(x) \sim \frac{x}{\ln(x)} π(x)ln(x)x

即小于等于 n n n 的正整数中有 O ( n log ⁡ n ) O(\frac{n}{\log n}) O(lognn) 个数为素数数

素数筛

方法一:对于 1 ∼ N 1 ∼ N 1N 的每个正整数判断是否为素数。时间复杂度为 O ( n n ) O(n \sqrt{n}) O(nn ) ,效率最低

方法二:埃式筛法:对于 2 ∼ n 2 ∼ n 2n 的每个正整数 x x x,若 x x x 为素数,则标记所有大于 x x x 小于 n n n x x x 的倍数。枚举到 x x x 时,若 x x x 没有被标记,则 x x x 为素数,其时间复杂度为 O ( n log ⁡ log ⁡ n ) O(n \log \log n) O(nloglogn)

inline void sieve([type] N){
    memset(P, 1, sizeof(P)), P[0] = P[1] = 0;
    for ([type] i = 2; i < N; ++i){
        if (!P[i] || i * i >= N) continue;
        for ([type] j = i * i; j < N; j += i) P[j] = 0;
    }
}

方法三:线性筛:从埃氏筛法改进而来,使每个合数只被它的最小质因数筛去,这样就能保证每个合数只被筛一次。比如埃氏筛法中 6 6 6 在已经被 2 2 2 筛去的情况下又被 3 3 3 筛了一遍,而我们希望 6 6 6 只被 2 2 2 筛去。这样就可以将整个算法的时间复杂度从 O ( n log ⁡ log ⁡ n ) O(n \log \log n) O(nloglogn) 降到 O ( n ) O(n) O(n)

inline void sieve([type] N){
    for (int i = 2; i <= N; ++i){
        if (!vis[i]) ++cnt, P[cnt] = i;
        for (int j = 1; j <= cnt && i * P[j] <= N; ++j){
            vis[i * P[j]] = 1;
            if (!(i % P[j])) break;
        }
    }
}

唯一分解定理

假设 n ≥ 2 ∈ Z n \ge 2 \in \mathbb{Z} n2Z,则有唯一的分解式:

n = ∏ i = 1 m p i k i n = \prod_{i = 1}^{m} p_i^{k_i} n=i=1mpiki

其中, p 1 < p 2 < ⋯ < p m ∈ P p_1 < p_2 < \cdots < p_m \in \mathbb{P} p1<p2<<pmP k i ∈ N > 0 k_i \in \mathbb{N} > 0 kiN>0

该分解式也常被人称为 质因数分解

vector<int> factor(int N){
    vector<int> F;
    for (int i = 1; i <= P[0]; ++i) {
        if (P[i] * P[i] > N) break;
        while (N % P[i] == 0) F.push_back(P[i]), N /= P[i];
    }
    if (N > 1) f.push_back(N);
    return F;
}

预处理复杂度: O ( n ) O(\sqrt{n}) O(n ),单词查询复杂度: O ( n ln ⁡ n ) O(\frac{\sqrt{n}}{\ln n}) O(lnnn )

模运算与同余

a a a b b b 为正整数,则 a   m o d   b = a − ⌊ a b ⌋ b a \bmod b = a - \lfloor \frac{a}{b} \rfloor b amodb=abab

( a − b )   m o d   n = 0 (a - b) \bmod n = 0 (ab)modn=0,则称 a a a b b b 同余,记作:

a ≡ b ( m o d n ) a \equiv b \pmod{n} ab(modn)

根据模运算,我们可以得到下列等式:

  • ( a + b )   m o d   p = ( a   m o d   p + b   m o d   p )   m o d   p (a + b) \bmod p = (a \bmod p + b \bmod p) \bmod p (a+b)modp=(amodp+bmodp)modp

  • ( a − b )   m o d   p = ( a   m o d   p − b   m o d   p + p )   m o d   p (a - b) \bmod p = (a \bmod p - b \bmod p + p) \bmod p (ab)modp=(amodpbmodp+p)modp

  • a b   m o d   p = ( ( a   m o d   p ) × ( b   m o d   p ) )   m o d   p ab \bmod p = ((a \bmod p) \times (b \bmod p)) \bmod p abmodp=((amodp)×(bmodp))modp

  • a b   m o d   p = ( a   m o d   p ) b   m o d   p a ^ b \bmod p = (a \bmod p) ^ b \bmod p abmodp=(amodp)bmodp

裴蜀定理

a a a b b b 是不全为 0 0 0 的整数,则必定存在整数 x x x y y y,满足不定方程 a x + b y = gcd ⁡ ( a , b ) ax + by = \gcd(a, b) ax+by=gcd(a,b)

求解该不定方程,需要使用 扩展欧几里得算法

b = 0 b = 0 b=0 时,原方程转换为 a x = gcd ⁡ ( a , 0 ) = a → x = 1 ax = \gcd(a, 0) = a \rightarrow x = 1 ax=gcd(a,0)=ax=1

b ≠ 0 b \ne 0 b=0 时,由于 gcd ⁡ ( a , b ) = gcd ⁡ ( b , a   m o d   b ) \gcd(a, b) = \gcd(b, a \bmod b) gcd(a,b)=gcd(b,amodb),因此我们希望找到一对 ( x ’ , y ’ ) (x’, y’) (x,y),满足:

b x ′ + ( a   m o d   b ) y ′ = gcd ⁡ ( b , a   m o d   b ) bx' + (a \bmod b)y' = \gcd(b, a \bmod b) bx+(amodb)y=gcd(b,amodb)

对于原方程,根据 a = ⌊ a b ⌋ b + a   m o d   b a = \lfloor \frac{a}{b} \rfloor b + a \bmod b a=bab+amodb 代入可得:

( ⌊ a b ⌋ b + a   m o d   b ) x + b y = gcd ⁡ ( a , b ) (\lfloor \frac{a}{b} \rfloor b + a \bmod b)x + by = \gcd(a, b) (⌊bab+amodb)x+by=gcd(a,b)

整理可得:

b ( ⌊ a b ⌋ x + y ) + ( a   m o d   b ) x = gcd ⁡ ( b , a   m o d   b ) b(\lfloor \frac{a}{b} \rfloor x + y) + (a \bmod b)x = \gcd(b, a \bmod b) b(⌊bax+y)+(amodb)x=gcd(b,amodb)

综合两个式子:

{ b x ′ + ( a   m o d   b ) y ′ = gcd ⁡ ( b , a   m o d   b ) b ( ⌊ a b ⌋ x + y ) + ( a   m o d   b ) x = gcd ⁡ ( b , a   m o d   b ) \begin{cases} bx' + (a \bmod b)y' = \gcd(b, a \bmod b) \\ b(\lfloor \frac{a}{b} \rfloor x + y) + (a \bmod b)x = \gcd(b, a \bmod b) \end{cases} {bx+(amodb)y=gcd(b,amodb)b(⌊bax+y)+(amodb)x=gcd(b,amodb)

比较系数可得:

{ x = y ′ y = x ′ − ⌊ a b ⌋ x \begin{cases} x = y' \\ y = x' - \lfloor \frac{a}{b} \rfloor x \end{cases} {x=yy=xbax

因此可以递归求解:

inline [type] exgcd([type] a, [type] b, [type] &x, [type] &y){
    if (!b){
        x = 1, y = 0;
        return a;
    }
    [type] d = exgcd(b, a % b, x, y);
    [type] t = x;
    x = y, y = t - (a / b) * y;
    return d;
}
乘法逆元

实际上,我们求出的 x x x 被称作 a   m o d   b a \bmod b amodb 的逆元,记作 a − 1 a ^ {-1} a1。当 x x x b b b 互素时,存在唯一的 x x x 的逆元。当 b b b 是素数时,所有不是 b b b 的倍数的整数都有唯一的逆元。

使用乘法逆元可以帮助我们完成模意义下的除法运算:

a b ≡ a × b − 1 ( m o d p ) \frac{a}{b} \equiv a \times b ^ {-1} \pmod{p} baa×b1(modp)

欧拉函数

φ ( i ) \varphi(i) φ(i) 表示,小于等于 i i i 的正整数中,与 i i i 互质的数的个数

欧拉函数具有以下的性质:

  • φ ( p k ) = p k − p k − 1 \varphi(p^k) = p^k - p^{k - 1} φ(pk)=pkpk1 p ∈ P p \in \mathbb{P} pP

  • 欧拉函数是 积性函数,即若 gcd ⁡ ( a , b ) = 1 \gcd(a, b) = 1 gcd(a,b)=1,则有 φ ( a ) × φ ( b ) = φ ( a × b ) \varphi(a) \times \varphi(b) = \varphi(a \times b) φ(a)×φ(b)=φ(a×b)

  • 欧拉反演: ∑ d ∣ n φ ( d ) = n \sum_{d \mid n} \varphi(d) = n dnφ(d)=n

欧拉函数的计算:

如果只需求出 φ ( n ) \varphi(n) φ(n):求出 n n n 的唯一分解 n = ∏ i = 1 m p i k i n = \prod_{i = 1}^{m} p_i^{k_i} n=i=1mpiki

根据积性, φ ( n ) = ∏ i = 1 m φ ( p i k i ) \varphi(n) = \prod_{i = 1}^{m} \varphi(p_i^{k_i}) φ(n)=i=1mφ(piki),根据 φ ( p k ) = p k − p k − 1 \varphi(p^k) = p^k - p^{k - 1} φ(pk)=pkpk1 可求

若需批量求出 φ ( n ) \varphi(n) φ(n) 可以利用到线性筛:

p p p i i i 的最小质因子,则分三种情况:

  • i i i 是素数,则 φ ( i ) = i − 1 \varphi(i) = i - 1 φ(i)=i1

  • p p p i p \frac{i}{p} pi 的质因子,则 φ ( i ) = φ ( i p ) × p \varphi(i) = \varphi(\frac{i}{p}) \times p φ(i)=φ(pi)×p

  • p p p i p \frac{i}{p} pi 互素,则 φ ( i ) = φ ( i p ) × φ ( p ) \varphi(i) = \varphi(\frac{i}{p}) \times \varphi(p) φ(i)=φ(pi)×φ(p)

inline void euler([type] N) {
    E[1] = 1;
    for ([type] i = 2; i <= N; ++i){
        if (!vis[i]) ++cnt, P[cnt] = i, E[i] = i - 1;
        for ([type] j = 1; j <= cnt && i * P[j] <= N; ++j){
            vis[i * P[j]] = 1;
            if (i % P[j]) E[i * P[j]] = E[i] * E[P[j]];
            else {
                E[i * P[j]] = E[i] * P[j];
                break;
            }
        }
    }
}

组合计数

加法原理和乘法原理

加法原理:完成一项工作有 n n n 类方法,第 i i i 类方法下又有 a i a_i ai 类方法,那么完成这项工作总共有 ∑ i = 1 n a i \sum_{i = 1} ^ {n} a_i i=1nai 种方法

乘法原理:完成一项工作有 n n n 步方法,第 i i i 步方法下又有 a i a_i ai 步方法,那么完成这项工作总共有 ∏ i = 1 n a i \prod_{i = 1}^{n} a_i i=1nai 种方法

排列数

A n m A_{n}^{m} Anm 表示从 n n n 个不重复的元素中选择 m m m 个按照一定顺序排列的方案数

根据乘法原理,第一个位置有 n n n 种选法,第二个位置有 n − 1 n − 1 n1
选法,第三个位置有 n − 2 n − 2 n2 种选法,以此类推,可得:

A n m = n × ( n − 1 ) × ( n − 2 ) × ⋯ × ( n − m + 1 ) = n ! ( n − m ) ! A_{n}^{m} = n \times (n - 1) \times (n - 2) \times \cdots \times (n - m + 1) = \frac{n!}{(n - m)!} Anm=n×(n1)×(n2)××(nm+1)=(nm)!n!

组合数

C n m C_{n}^{m} Cnm 表示从 n n n 个不重复的元素中选择 m m m 个的方案数

根据排列数,每种方案被计算了 m ! m! m! 次,因此可得:

C n m = A n m m ! = n ! m ! ( n − m ) ! C_{n}^{m} = \frac{A_{n}^{m}}{m!} = \frac{n!}{m! (n - m)!} Cnm=m!Anm=m!(nm)!n!

组合恒等式

根据组合数的计算方式,可以得到一系列的恒等式:

  • C n m = C n n − m C_{n}^{m} = C_{n}^{n - m} Cnm=Cnnm

  • C n m = C n − 1 m + C n − 1 m − 1 C_{n}^{m} = C_{n - 1}^{m} + C_{n - 1}^{m - 1} Cnm=Cn1m+Cn1m1杨辉三角递推

  • ∑ i = 0 n C n i = 2 n \sum_{i = 0}^{n} C_{n}^{i} = 2 ^ n i=0nCni=2n

  • ( x + y ) n = ∑ i = 0 n C n i x n − 1 y i (x + y) ^ n = \sum_{i = 0}^{n} C_{n}^{i} x ^ {n - 1} y ^ i (x+y)n=i=0nCnixn1yi二项式定理

捆绑法、插空法、隔板法

如果要求若干物品相邻,则可以将它们作为一个整体来进行计数

如果要求若干物品两两不相邻,可以先将其他物品放好,然后将
这些物品插入空当中,进行计数

通过加入隔板将问题转化,解决给相同元素分组的方案数问题

容斥原理

假设有两类元素 A A A B B B,总元素个数为 A A A 元素个数 + + + B B B 元素个数 − - 既是 A A A 类也是 B B B 类的元素个数

把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去的方式被称为 容斥原理

假设有三类元素 A A A B B B C C C,总元素个数为:

∣ A ∪ B ∪ C ∣ = ∣ A ∣ + ∣ B ∣ + ∣ C ∣ − ∣ A ∩ B ∣ − ∣ B ∩ C ∣ − ∣ A ∩ C ∣ + ∣ A ∩ B ∩ C ∣ \mid A \cup B \cup C \mid = \mid A \mid + \mid B \mid + \mid C \mid - \mid A \cap B \mid - \mid B \cap C \mid - \mid A \cap C \mid + \mid A \cap B \cap C \mid ABC∣=∣A+B+CABBCAC+ABC

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三日连珠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值