数论学习笔记

数论学习笔记

整除性

\(def_0\)\(a\) 整除\(b\)指,若\(a,b\)为整数且\(a \ne 0\) 存在整数\(c\) 使得\(b = ac\)。称\(a\)\(b\)的因子,\(b\)\(a\)的倍数 记作\(a|b\) 。如\(13|182,-5|10...\)

对于\(a,b,c\in\Z\) 有以下几个结论

  1. 若$b|a,c|b $ 则 \(c|a\)
  2. \(b|a \iff cb|ca\)
  3. \(c|a,c|b\) 对于\(m,n \in \Z\)\(c| ma + mb\)

\(def_1\)[带余除法]:\(a,b \in \Z\) ,其中\(b>0\)则存在连个唯一的整数\(q,r\)

\(a = bq + r \ \ 0 \leq r < b (1)\)

\(def_2\) :把(1)式中的的q叫做不完全商,将r叫做非负最小剩余,记作\(\left \langle a \right \rangle_b = r\) 其中b通常省略不写.有

\(\left \langle a \pm b \right \rangle = \left \langle \left \langle a \right \rangle \pm \left \langle b \right \rangle \right \rangle\)

\(\left \langle a \times b \right \rangle = \left \langle \left \langle a \right \rangle \times \left \langle b \right \rangle \right \rangle\)

此部分应用见数论分块

最大公因数数和最小公倍数

辗转相除法和最大共因数

\(def_0\):定义啊\((a,b)\)\(a,b\)的最大共因数,\([a,b]\)\(a,b\)的最小公倍数,\([a,b] = \frac{ab}{(a,b)}\).

\(def_1\):辗转相除法\(a,b,c \in \Z\) 且皆不为0有 \(a = bq + c \ ,\ q \in \Z\) ,则\((a,b)=(b,c)\)计算机类通常用递归实现

  1. \(a,b >0\)\((a,b)\)就是辗转相除法的最后的一个余数写作$(a,b) = r $
  2. 给定两整数\(a,b,>0\),则存在两整数使得\((a,b)=ma +nb\)
  3. \(a|bc,(a,b)=1\)\(a|c\)
  4. \(a_1,a_2,..a_n,n>2\)则存在\(d_n = (a_1,a_2,..a_n)\)为序列最大的共因数
  5. \(a_1,a_2,..a_n,n>2\)则存在\(x_1,x_2 .. x_n\)使得\((a_1,a_2,..a_n) = a_1x_1 + ... a_nx_n\)

对于最大共因数可用math库中的 __gcd函数实现 ,最小公倍数根据定义为\(ab /gcd(a,b)\)

素数整数唯一分解定理

当 p 为素数时 ,\(a \in \Z\):有几个引理

  • \(a \in \Z\) q为a的最小正因数 \(q \le \sqrt{a}\)
  • \(p|a\)\((p,a)=1\)
  • \(p|ab\),则\(p|a\)\(p|b\)
  • \(\forall b > 1.b \in \Z\),\(p\)\(p\)的一素因子, \(p\) 必然出现在\(b\)分解素数乘积分式中

\(def_0\) [整数唯一分解定理]对于\(a \in \Z\)

\[a=q_1q_2..q_n \ \ \ q_1 \le q_2 .. \le q_3 \]

\(def_1\) :素数是无限多个
\(def_2\) :存在无数个形如\(4n-1\)的素数
\(def_3\) :对于\(x_0 \in \Z\) 不存在多项式\(f(x) = a_nx^n + a_{n-1}x^{n-1}+ ..a_1x + a_0\)使得所有\(\le x_0\)的整数时都成立

根据引理1,可以通过试除法来判断一个数是否为素数,时间复杂度为\(O(\sqrt{n})\)

bool is_prime(int n) {
    if (n < 2) return false;
    for (int i = 2; i <= sqrt(n); i++)
        if (n % i == 0) return false;
    return true;
}

当一次性对\(1-n\)之间数进行素性判断时,其复杂度就会到达\(O(n\sqrt{n})\) 于是可以通过两种算法来实现快速筛选素数分别是Eratosthenes筛法\(O(n\log n \log n)\)与线性筛\(O(n)\) ,前者可以通过bitset 或分块进一步优化,后者则不仅可以求素数也可以求任何积性函数,因为频繁访问数组后者使用bitset 则会使性能下降.

void get_primes(int n)
{
    for (int i = 2; i <= n; i ++ )
    {
        if (st[i]) continue;
        primes[cnt ++ ] = i;
        for (int j = i + i; j <= n; j += i)
            st[j] = true;
    }
}
void get_primes(int n)
{
    for (int i = 2; i <= n; i ++ )
    {
        if (!st[i]) primes[cnt ++ ] = i;
        for (int j = 0; primes[j] <= n / i; j ++ )
        {
            st[primes[j] * i] = true;
            if (i % primes[j] == 0) break;
        }
    }
}
算法 时间 空间
朴素算法 302ms 808kb
埃式筛 20ms 1372kb
线性筛 20ms 680 kb
bitset优化埃式筛 20ms 808kb
bitset优化线性筛 20ms 764kb

试除法分解质因数,复杂度为\(O(\sqrt{n})\)

void divide(int n) {
   m = 0;
   for (int i = 2; i*i <= n; i++) {
       if (n % i == 0) { // i是质数
           p[++m] = i, c[m] = 0;
           while (n % i == 0) n /= i, c[m]++; // 除掉所有的i
       }
   }
   if (n > 1) // n是质数
       p[++m] = n, c[m] = 1;
   for (int i = 1; i <= m; i++)
       cout << p[i] << '^' << c[i] <<endl;
}

费马数和梅森素数数

梅森素数

\(def_0\) : \(p\) 属于素数,形如\(2^p-1\)的素数叫梅森素数,记作\(M_p = 2^p-1\)
\(def_2\) : \(p\)是一个奇素数,\(q\)\(M-P\)的一个素因子,则\(q\) 形如\(q=2kp+1\)

引理:\(a>0,b>0,S>0则(S^a-1,S^b-1)=S^{(a,b)} - 1\)

费马数

\(def_0\) :形如\(T_n = 2^{2^n} + 1, n > 0\)的数叫费马数

\(def_1\) :\(F_m,F_n,m \ne m\)\((F_m,F_n)=1\)

完全数

\(def_0\) \(n\in \Z\),\(n\)的全部因数之和为\(2n\) 则称\(n\)完全数

\(def_1\) \(n = p_{1}^{a_1}...p_k^{a_k}\)\(n\)的标准分解式则,\(\sigma(n) = \sum_{d|n}d\)表示n的诸因子之和有

\[\sigma(n) = \frac{p_1^{a_1+1}}{p_1 - 1}... \frac{p_k^{a_k+1}}{p_k - 1} \]

\(def_2\) n 是一个偶完全数的充分必要条件是\(n\) 具有形如\(2^{p-1}(2^p - 1)\)的因子,其中\(p\)\(2^p - 1\)均为素数
\(def_3\) n 是一个奇完全数,则\(n\) 有分解式\(n=p^aq^{b_1}...q^{b_t}\),\(a,p\)都是形如\(4n-1\)的素数

一次不等式

\(def_0\) :二次不等式指的式形如 \((1)a_1x + a_2y = n\)其中\(a_1,a_2,n\) 均为给定的整数

\(def_1\) :\(a_1x + a_2y = n\)有解的充分必要条件是\((a_1x,a_2y)|n\)

\(def_2\) :\((a_1,a_2)=1\) 则(1)的全部解可表示为\(x=x_0+a_2t,y=y_0-t\),其中\(x_0,y_0\)为(1)的一组解,t为任意整数

\(def_3\) :\(s \ge 2\)\(s\)元一次不等式\(a_1x_1 + a_2x_2 + .. + a_sx_s = n\)有解的充分必要条件是\((a_1,..,a_s) |n\)

通过扩展欧几里得算法\(O(\log b)\),可以解决二次不等式的问题

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

同余

同余的定义及其性质

\(def_0\) : \(m a,b,\in \Z\)\(m\)\(a,b\) 所得的余数相同那么我们说\(a,b\)对模数\(m\) 同余 记作 \(a \equiv b \pmod n\),不同余记作 \(a \not \equiv b \pmod n\)

同余的一些性质

  • \(a \equiv a \pmod m\) (自反性)
  • \(a \equiv b \pmod m\)\(b \equiv a \pmod m\) (对称性)
  • \(a \equiv b \pmod m\),\(b \equiv c \pmod m\)\(a \equiv c \pmod m\)(传递性)

\(def_0\) \(a,b\) 对于\(m\) 同余的充分必要条件是\(m|a-b\)

\(def_1\) \(a \equiv b \pmod m \ \ \alpha \equiv \beta \pmod m\)那么有

  1. \(ax + \alpha y = bx + \beta y \pmod m\)
  2. \(a\alpha \equiv b \beta \pmod m\)
  3. \(a^n \equiv b^n \pmod m,n > 0\)
  4. \(f(x) \equiv f(b)\) 其中 \(f(x)\)为任意给定的一个整系数多项式

\(def_2\) :若 \(ac \equiv bc \pmod m\)且若 \((m,c) = d\)\(a \equiv b \pmod_{ \frac{m}{d}}\)

剩余系和完全剩余系

剩余系

\(def_0\) :\(m \in \Z^+\)\(C_r(r = 0,1,...m-1)\) 表示所有形如\(qm+r\)的整数构成的集合其中\(q=0,\pm 1,\pm 2 ..\)\(C_0...C_{m-1}\) 叫做模数\(m\) 的剩余系

  1. \(m>0,C_0,C_1...C_{m-1}\)是模数\(m\)的剩余系,则有

    1. 每一个整数恰好包含在某一个类\(C_j\) 里, 这里 \(0 \le j \le m - 1\)
    2. \(x,y\) 属于同一类的充分必要条件是\(x\equiv y \pmod m\)

完全剩余系

\(def_0\) :在模数\(m\) 的剩余系\(C_0,C_1 ..C_{m-1}\) 中各取一个数\(a \in C_j\) \(j = 0,1..m-1\)\(m\) 个数\(a_0,a_1..a_{m-1}\) 称为为\(m\)完全剩余系.

\(def_1\) :由上可知\(m\) 个整数构成\(m\)的完全剩余系的充分必要条件是两两不同余

最常用的完全剩余系的是\(0,1,2..,m-1\) ,他们被称为模\(m\) 的非负最小剩余系

\(def_2\) :\((k,a) = 1\)\(a,a_2,..a_m\) 是模数\(m\) 的一组完全剩余系,则\(ka,ka_2..ka_m\) 构成\(m\) 的完全剩余系

\(def_3\) :设\(m_1,m_2 >0,(m_1,m_2)=1\) ,而\(x_1,x_2\) 分别通过\(m_1,m_2\) 的完全剩余系,则$

\(def_4\) Wilson定理:\(p\) 是一个素数 ,\((p-1)!+1\equiv \pmod p\)

缩系

\(def_0\) :\(m\in\Z\) 在与\(m\) 互素的剩余系中个取一个数组成的集合叫模数\(m\)缩系

欧拉函数

\(def_0\) :定义欧拉函数 \(\varphi(n)\) 是一个定义在正整数集合上的函数\(\varphi(n)\) 的指的是序列\([0,1,2..n-1]\) 中与\(n\) 互素的个数,显然当\(n\) 为素数时\(\varphi(n) = n - 1\)

\(def_1\) :模数\(m\) 的一组缩系中含有\(\varphi(m)\) 个数

\(def_2\) : 若有\(a_1,..a_{\varphi(m)}\) 个整数与\(m\) 互素,则\(a_1,..a_{\varphi (m)}\)形成模\(m\) 的缩系的充分必要条件是两两对模\(m\) 不同余

\(def_3\):\((a,m)=1,x\) 通过模数\(m\) 的缩系,则\(ax\) 也通过模数\(m\) 的一组缩系.

\(def_4\) :欧拉定理\(m>1,(a,m)=1\)\(a^{\varphi(m)} \equiv1\pmod m\)

\(def_5\):费马小定理\(p\) 为素数 ,则\(a^p \equiv a \pmod p\) 也可写作\(a^{p-1} \equiv 1 \pmod p\)

一次同余式

\(def_0\) \(f(x) = a_nx^n + a_{n-1}x^{n-1} +...+a_1x + a_0:(1),(n>0),i=0,...n\)\(f(x) \equiv 0 \pmod m,m >0\) 叫做模数\(m\)同余式,若\(a_n \not \equiv 0 \pmod m\)\(n\) 叫做 \((1)\)的次数满足\(f(x_0) \equiv 0 \pmod m\)\(x_0 \equiv x \pmod m\) 叫做同余式的解,不同的解是值互不同余的解

四个重要定理

  1. \((a,m)=1,m>0\) 则同余式\(ax \equiv b \pmod m\) 恰好有一个解.

  2. 在1的条件下\(x \equiv ba^{\varphi(m)-1} \pmod m\) 是唯一解

  3. \((a,m)=d,m>0\) 同余式\(ax \equiv b \pmod m\)有解的充分必要条件是:\(d|b\)

  4. \((a,m) = d , m > 0 ,d|b\) 同余式\(ax \equiv b \pmod m\)\(d\) 个解

\(def_1\) :\(f(x) = a_nx^n + a_{n-1}x^{n-1} +...+a_1x + a_0:(1),(n>0),i=0,...n\) 有解的充分必要条件是满足\((a_1,a_2...a_n)|a_0\) ,若有解则解的个数是\(m^{a_0-2}(a_1,a_2...a_n)\)

乘法逆元

对于一个线性同余方程\(ax \equiv 1 \pmod b\) ,我们称\(x\)\(a\mod b\) 的逆元,记作\(a^{-1}\)
通过快速幂或者扩欧来求解,快速幂利用了费马小定理因此要求\(b\) 为素数,而扩展欧几里得算法仅要求\(\gcd (a,b) = 1\)

long long binpow(long long a, long long b) {
  long long res = 1;
  while (b > 0) {
    if (b & 1) res = res * a;
    a = a * a;
    b >>= 1;
  }
  return res;
}

模数是素数的同余式

\(def_0\) :Lagrange 定理:\(p\) 是素数\(f(x) = a_nx^n + a_{n-1}x^{n-1} +...+a_1x + a_ 0\) \((n>0),a_n \not \equiv 0 \pmod p\) 则同余式\(f(x) \equiv 0\pmod p\)最多有\(n\) 个解

推论: \(p\) 是素数 \(f(x) = a_nx^n + a_{n-1}x^{n-1} +...+a_1x + a_ 0 \equiv 0 \pmod p\)

的解的个数大于\(n\)\(p|a_i(i=0...n)\)

\(def_1\)\(Wolstenholme\)定理设\(p > 3\)\(q\) 为素数有

\[\sum_{k=1}^{p-1} \frac{(p-1)!}{k} \equiv 0 \pmod p^3 \]

孙子定理

\[\left \{ \begin{matrix} x \equiv b_1 \pmod {m_1} \\ x \equiv b_2 \pmod {m_2} \\ ... \\ x \equiv b_n \pmod {m_n} \end{matrix} \right . \]

被称为一次同余方程组,孙子算法可以系统化的解决此类问题,孙子算法推广为孙子定理也称中国剩余定理.

\(def_0\) :设\(m_0,m_1...m_{n-1}\)\(n\) 个两两互素的数那么,有模\(M = m_1m_2..m_n\) 的唯一解

\[x \equiv M_1M_1'b_1 + M_2M_2'b_2 ...+ M_{n}M_{n}' b_n \]

其中有\(M_i'M_i \equiv 1 \pmod {m_i},i = 1,...,k\)

\(def_1\) :\(m_1,m_2...m_k\)\(k\) 个两两互素的正整数数,\(M = m_1m_2..m_n\)那么有解的充分必要条件是\(f(x) \equiv 0 \pmod m_i(i = 1,..,k)\)

LL CRT(int k, LL* a, LL* r) {
  LL n = 1, ans = 0;
  for (int i = 1; i <= k; i++) n = n * r[i];
  for (int i = 1; i <= k; i++) {
    LL m = n / r[i], b, y;
    exgcd(m, r[i], b, y);  // b * m mod r[i] = 1
    ans = (ans + a[i] * m * b % n) % n;
  }
  return (ans % n + n) % n;
}

模数是素数幂的同余式

\(f(x) =a_nx^n+..+a_1x+a_0 \pmod {p^a},n>0,p^a \not | a_n\)

对于上式显然有;\(f(x) \equiv\pmod p\)

\(def_1\) :设\(x\equiv x_i \pmod p\)

参考

《具体数学》
OIwiki
《初等数论讲义》

posted @ 2022-07-28 14:11  Erfu  阅读(114)  评论(0)    收藏  举报