integer divisibility


整除

定义

$a, b \in Z$ 且 $b \neq 0$ ,如果存在 $q \in Z$ 使得
$$
a=q \cdot b
$$
则称 $b$ 整除 $a$ 或者 $a$ 被 $b$ 整除,记作 $b | a$ ,$b$ 称为 $a$ 的因数,$a$ 称为 $b$ 的倍数

性质:

  • 当 $b$ 遍历整数 $a$ 的所有因数时,$-b$ 和 $\frac{a}{b}$ 也遍历 $a$ 的因数

  • 若 $a_1, …, a_n \in Z$ 都是 $c \in Z^*$ 的倍数,则他们的整系数线性组合也是 $c$ 的倍数,即 $\forall s_1, …, s_n \in Z$ 都有 $c | a_1s_1+…+a_ns_n$

  • 若 $p$ 是素数,且 $p|a_1a_2 \cdots a_n$ ,则 $ \exists i, 1 \le i \le n$,$p|a_i$

素数

定义

$n \in Z^* $ 且 $n \neq \pm 1$ 且 $n$ 只有因数 $\pm1、\pm n$ ,则 $n$ 称之为素数,通常情况下约定素数为正整数,记作 $p$

性质:

  • 合数的大于 $1$ 的最小正因数 $p$ 必然是素数,且 $p \le \sqrt{n}$
  • 等差数列 $qn+l$ 在 $(q, l)=1$ 时有无穷多个素数,Dirichlet

Eratosthenes

依次删除 $\le \sqrt{N}$ 的所有素数的倍数,可求得所有不大于给定正整数 $N$ 的素数

def eratosthenes(n):
    """use eratosthenes sieve to count all prime number"""
    if n <= 1:
        return 0
    sifter = np.ones(n+1, dtype=np.int8)
    sifter[0:2] = 0
    for i in range(2, int(np.ceil(np.sqrt(n)))+1):
        if sifter[i]:
            for j in range(2, n // i + 1):
                sifter[i * j] = 0

    return sifter.sum()

欧几里得除法

定义

$a, b \in Z$ ,且 $b > 0$,则 $\forall c \in Z$ 存在唯一的整数 $q, r$ 使得 $a=q \cdot b + r$,$c \le r < c+b$

其中 $q$ 称为 $a$ 被 $b$ 除所得的不完全商,$r$ 叫做 $a$ 被 $b$ 除所得的余数

  • $c=0$ 时称 $r$ 为最小非负余数
  • $c=1$ 时称 $r$ 为最小正余数
  • $c=-b+1$ 时称 $r$ 为最大非正余数
  • $c=-b$ 时称 $r$ 为最大负余数
  • 若 $c$ 满足 $-\frac{b}{2} \le r < \frac{b}{2} \; or \; -\frac{b}{2} < r \le \frac{b}{2}$ 时称 $r$ 为绝对值最小余数

整数的表示

$\forall b \in Z \; and \; b > 1$ ,每个正整数 $n$ 在 $b$ 进制下的表示存在且唯一,且 $n$ 的 $b$ 进制位数 $k=[\log_bn]+1$

最大公因数

$d=(a_1,…,a_n)$ 称为最大公因数,如果:

  • $d|a_1, …, d|a_n$
  • 若 $e|a_1, …, e|a_n$,则 $e|d$

广义欧几里得除法

喵喵喵

性质

  • $n \le 5logb$ ,运用数学归纳法可以证明 $b$ 不小于 $fibonacci$ 的第 $n+1$ 项

Bezout 等式

定义

$a, b \in Z^+$ ,存在整数 $s, t$ 使得 $sa+tb=(a,b)$

求整数 $s, t$ 的方法

方法一:首先根据广义欧几里得除法求出 $(a,b)=r_n$,带回并依次消去 $r_{n-1}, … ,r_1$

例如:$a=1859, b=1573$ ,求 $s, t$ 使得 $s \cdot a + t \cdot b=(a,b)$

根据欧几里得除法,我们有:
$$
\begin{align}& 1859 = 1573 \times 1 + 286 \\ & 1573 = 5 \times 286 + 143 \\ & 286 = 2 \times 143\end{align}
$$
得到 $(a,b)=143$ ,带回
$$
\begin{align}143 & = 1573 - 5 \times 286 \\ & = 1573 - 5 \times (1859-1573) \\ & = -5 \times 1859 + 6 \times 1573\end{align}
$$
于是 $s=-5, t=6$

方法二:列表法

喵喵喵

依然使用方法一的例子

$j$ $s_j$ $t_j$ $q_{j+1}$ $r_{j+1}$
-3 1859
-2 1 0 1573
-1 0 1 1 286
0 $-s_{-1} \times q_0 + s_{-2} = 1$ $-t_{-1} \times q_0 + t_{-2} = 1$ 5 143
1 $-s_{0} \times q_1 + s_{-1} = -5$ $-t_{0} \times q_1 + t_{-1} = 6$ 2 0

我们有 $s=s_1=-5, t=t_1=6, (a, b)=r_0=143$

根据列表法求 s,t和(a,b)

def extended_euclidean(a, b):
    """use extended euclidean algorithm to calculate s, t, k, s.t. sa + tb = k = (a, b)"""
    quotients = []
    q, r1 = divmod(a, b)
    r2 = b
    quotients.append(q)
    while r1 > 0:
        q, r = divmod(r2, r1)
        r2 = r1
        r1 = r
        quotients.append(q)

    s: list = [1, 0]
    t: list = [0, 1]
    for i in range(len(quotients) - 1):
        s.append(quotients[i] * -s[i + 1] + s[i])
        t.append(quotients[i] * -t[i + 1] + t[i])

    return s[-1], t[-1], r2

性质

  • 若 $a, b \in Z$ 且 $a^2 + b^2 \neq 0$,则
    • $\forall m \in Z^+$ ,$(a \cdot m, b \cdot m)=(a, b) \cdot m$
    • 若 $d \in Z^*$,且 $d|a, d|b$ ,则 $(\frac{a}{d}, \frac{b}{d})=\frac{(a,b)}{|d|}$
      • 特别的,若取 $d=(a,b)$,则我们可以构造两个互素的整数 $\frac{a}{d}, \frac{b}{d}$
  • $a, b, c \in Z, \; b \ne 0, c \ne 0$ 且 $(a, c)=1$,则有 :

$$
(ab, c)=(b,c)
$$

  • $a_i, c \in Z$ 且 $(a_i, c)=1$ 则有:

$$
(\Pi_{i=1}^{n}a_i, c)=1
$$

  • $a, b \in Z^+$,则 $(2^a-1, 2^b-1)=2^{(a,b)}-1$

  1. Bezout 等式可扩展到 $n$ 维的情况
  2. 求 n 个数的最大公因数相当于递归的求两个数的最大公因数

整数分解

给定正合数 $n > 1$,若 $ \exists a,b$ ,满足:
$$
n|a^2-b^2 \\ n \nmid a+b \\ n \nmid a-b
$$
则 $(n, a-b)$,$(n,a+b)$ 都是 $n$ 的真因数

算术基本定理

任意整数 $n>1$ 可以唯一的表示成
$$
n = p_1^{\alpha_1} \cdots p_n^{\alpha_s}, \quad \alpha_i > 0,p_i<p_j(i<j)
$$
:利用算术基本定理,很多结论几乎是显而易见的

性质

  • $n$ 的因数个数 $d(n)=\Pi(1+\alpha_i)$
  • $n$ 的所有因数的和:

$$
\Pi(1 + p_i + \cdots p_i^{\alpha_i})=\Pi(\frac{p_i^{\alpha_i+1}-1}{p_i-1})
$$

  • $a,b$ 是两个正整数,则存在整数 $a’|a, b’|b$ ,使得:

$$
a’ \cdot b’=[a,b] \qquad (a’,b’)=1
$$

素数定理


$$
\pi(x) = \sum_{p \le x} 1
$$
则有:
$$
\frac{\ln 2}{3}\frac{x}{\ln x} < \pi(x) < 6 \ln 2 \frac{x}{\ln x}
$$
以及
$$
\lim_{x \rightarrow \infty} \cfrac{\pi(x)}{\cfrac{x}{\ln x}} = 1
$$


文章作者: qiufeng
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 qiufeng !
评论
 上一篇
Query Parameters Query Parameters
Query Parameters当声明的函数参数不是路径参数的一部分时,它们会被自动的解释为查询参数(可以直观的理解为 URL 中 ? 后面,以 & 分割的键值对) from fastapi import FastAPI app
2020-04-11
下一篇 
Path Parameters Path Parameters
path 中可以用 python 格式字符串的形式来声明变量,例如 from fastapi import FastAPI app = FastAPI() @app.get("/items/{item_id}") async def
2020-04-10
  目录