Loading

数论学习笔记

目录

  1. 前言

  2. 数论基础

    1.1 整除

    1.2 带余除法,同余

  3. 质数

    2.1 唯一分解定理

    2.2 质数筛(线性筛)

    2.3 欧拉函数

  4. 最大公因数/最小公倍数

    3.1 辗转相除法

    3.2 裴蜀定理

  5. 线性同余方程

    4.1 费马小定理

    4.2 欧拉定理

    4.3 逆元

    4.4 求解线性同余方程

    4.5 中国剩余定理

  6. 威尔逊定理

  7. 卢卡斯定理

前言

数论太差了,恶补一下。

学一点更一点。

数论基础

整除

\(a\in \N^+\)\(b\in \Z\) ,若存在整数 \(q\) 使得 \(b=a\times q\) ,则称 \(b\) 可被 \(a\) 整除,记作 \(a|b\) ,称 \(a\)\(b\) 的因数,\(b\)\(a\) 的倍数。

整除的性质:

  1. \(a|b\)\(b|c\) ,则 \(a|c\)
  2. \(a|b\)\(a|c\) ,则满足 \(a|(b\times x+c\times y)\) ,其中 \(b,c\) 为整数。
  3. \(m \neq 0\),则 \(a\,|\,b \iff am\,|\,bm\)
  4. 若整数 \(x,y\) 满足 \(ax+by=1\)\(a\,|\,n,b\,|\,n\) ,则 \(a\times b\,|\,n\)
  5. \(b=k\times d+c\) ,则 \(d\,|\,b \iff c\,|\,b\)

带余除法,同余

若存在整数 \(a,b\)\(d\) 为给定的整数 ,满足 \(b=q\times a+r,d\leq r <d+|a|\) ,则称 \(r\)\(b\) 除以 \(a\) 的余数。

也可以记作 \(b\equiv r\,(\text{mod}\,\,a)\) 。意味 \(b\)\(r\) 在取模 \(a\) 意义下相等。

同余的性质:

  1. \(a\equiv b\pmod m,b\equiv c\pmod m\) ,则 \(a\equiv c\pmod m\)
  2. \(a\equiv b\pmod m\)\(a+c\equiv b+c \pmod m\)
  3. \(a\equiv b\pmod m\)\(c\equiv d\pmod m\) ,则 \(a\times c\equiv b\times d\pmod m\)
  4. \(a\times b \equiv k=\) \((a\bmod k)\times(b\bmod k)\)
  5. \(\gcd(p,q)=1, a\equiv b\pmod p,a\equiv b\pmod q\) ,则 \(a\bmod pq=b\)

质数

设整数 $p\neq 0,\pm1 $,且 \(p\) 没有除 \(1\) 外的其它因数,则称 \(p\) 为质数。

任何一个大于 \(3\) 的质数都可以表示为 \(6k\pm 1\) 的形式

唯一分解定理

引理:若质数 \(p\,|\,ab\)\(p\,|\,a\)\(p\,|\,b\) 满足其一。

设正整数 \(a\) ,则必有:

\[a=p_1^{e_1}p_2^{e_2}\cdots p_n^{e_n} \]

其中 \(p_i\) 为质数,\(e_i\) 为该质数的次数。

在不计次序的情况下,该表示唯一。

质数筛(线性筛)

我们记 \(f_i\) 标记 \(i\) 是否为质数,\(p_i\) 为已经筛出来的质数。

对于每一个筛出来的质数,我们将它乘上之前筛出的每一个质数,即可筛出所有质数。

为了优化时间,当我们发现这个数曾被筛过便直接跳出循环。

时间复杂度:\(O(n)\)

void work(int n)
{
    for(int i=2;i<=n;i++)
    {
        if(!f[i])
            p[++tot]=i;
        for(int j=1;j<=tot;j++)
        {
            vis[i*p[j]]=1;
            if(i%p[j]==0) break;
        }
    }
}

欧拉函数

定义:\(\varphi(n)=\sum_{i-1}^n [\gcd(i,n)=1]\)

性质:

  1. \(n\) 为质数时,\(\varphi(n)=n-1\)
  2. \(\varphi(ab)=\varphi(a)\times\varphi(b)\)
  3. \(n\) 为奇数时,\(\varphi(n)=\varphi(2n)\)
  4. \(n=\sum_{d|n} \varphi(d)\)
  5. \(n\) 唯一分解后,\(n=\prod p_i^{e_i}\)\(\varphi(n)=n \times \prod_{i = 1}^s{\dfrac{p_i - 1}{p_i}}\)

线性筛求欧拉函数:

\(p_1\)\(n\) 的最小质因子,则:

\(\frac{n}{p_1}\bmod p_1=0\) 时,\(\varphi(n)=p_1\times \varphi(\frac n{p_1})\)

否则 \(\varphi(n)=(p_1-1)\times\varphi(\frac n{p_1})\)

所以我们可以直接写出:

int phi[N],f[N],p[N],tot;
void work(int n)
{
    for(int i=2;i<=n;i++)
    {
        if(!f[i])
        {
            p[++tot]=i;
            phi[i]=i-1;
        }
        for(int j=1;j<=tot&&i*p[j]<=n;j++)
        {
            f[i*p[j]]=1;
            if(i%p[j]==0)
            {
                phi[i*p[j]]=phi[i]*p[j];
                break;
            }
            else phi[i*p[j]]=phi[i]*phi[p[j]];
        }
    }
}

最大公约数

定义:对于两个整数 \(x,y\) ,他们的最大公约数为他们共有因数中最大的一个,记作 \(\gcd(x,y)\)

辗转相除法

首先有定理:不妨设 \(a>b,\) \(\gcd(a,b)=\gcd(b,a\%b)\)

证明:

\(a=k\times b+r,r<b\)

对于所有的公约数 \(d\),总满足 \(d\,|\,a,d\,|\,b\),所以显然 \(d\,|\,k\times b\)

于是 \(d\,|\,(a-k\times b)\)

又因为 \(a-k\times b=r\)

于是可得 \(\gcd(a,b)=\gcd(b,a\%b)\)

证毕。

代码中我们可以使用递归来实现:

int gcdd(int a,int b)
{
    if(b==0) return a;
    return gcdd(b,a%b);
}

裴蜀定理

定义:\(a,b\) 为不全为 \(0\) 的整数,存在整数 \(x,y\) 使得 \(ax+by=\gcd(a,b)\)

证明:

充分性:

\(\gcd(a,b)=d\) ,我们将两边同除 \(d\) ,式子变为 \(a_1x+b_1y=1,\gcd(a_1,b_1)=1\)

我们发现 \(\gcd(a_1,b_1)=\gcd(b_1,r_1)=\gcd(r1,r2)...\gcd(r_{n-1},r_n)=1\)

于是我们发现:

\[a_1=b_1\times k_1+r_1\\ b_1=r_1\times k_2+r_2\\ \cdots\\ r_{n-1}=k_n\times r_n \]

\(r_n=1\) 时跳出,可得:

\(r_{n-2}=k_{n}r_{n-1}+1\)

\(r_{n-2}-k_{n}r_{n-1}=1\)

\(r_{n-3}=k_{n-2}r_{n-2}+r_{n-1}\)

\(r_{n-3}-k_{n-1}r_{n-2}=r_{n-1}\)

带入后可得:

\(r_{n-2}-k_{n}(r_{n-3}-k_{n-1}r_{n-2})=1\)

\((k_{n-1}k_n+1)r_{n-2}-k_nr_{n-3}=1\)

发现可以这样消掉 \(r\) 后,得证:\(a_1x+b_1y=1\)

所以存在整数 \(x,y\) 使得 \(ax+by=\gcd(a,b)\)

这个过程可以在辗转相除中实现。

线性同余方程

费马小定理

\(p\) 为质数,\(\gcd(a,p)=1\) ,则 \(a^{p-1}\equiv 1\pmod p\)

证明:

我们设 \(A=\{1,2,3,...,p-1\}\),整数 \(a\) 满足 \(p\nmid a\)

发现存在以下性质:\(\prod_i^n A_i\equiv \prod_i^n A_i\times a\pmod p\)

所以易得:\(\prod_i^{p-1}A_i\equiv \prod_i^{p-1}A_i\times a\pmod p\)

约去后得:\(a^{p-1}\equiv 1\pmod p\)

证毕。

欧拉定理

\(\gcd(a,m)=1\),则 \(a^{\varphi(m)}\equiv 1\pmod m\)

证明:与费马定理证明类似,不做赘述。

逆元

定义:若 \(ax\equiv 1\pmod b\),则 \(x\) 称作 \(a\)\(b\) 的逆元,记作 \(a^{-1}\)

费马小定理求逆元:

发现 \(ax\equiv 1\pmod b\)

\(ax\equiv a^{b-1}\pmod b\)

\(x\equiv a^{b-2}\pmod b\)

于是我们可以直接快速幂求解。

线性求逆元:

对于 \(i\) 的逆元,我们有:

\[1^{-1}\equiv1\pmod p\\ i^{-1}\equiv (p-\frac pi)(p\bmod i)^{-1}(i\neq 1) \]

代码实现:

inv[1]=1;
for(int i=2;i<=n;i++)
    inv[i]=((p-p/i)*inv(p%i))%p;
posted @ 2023-10-23 22:07  sheeplittlecloud  阅读(14)  评论(0编辑  收藏  举报