zoukankan      html  css  js  c++  java
  • 数论

    (本篇博客大部分内容都会在讲证明(也许不够严谨),要想看代码实现的请点击这里


    目录

    • 数论基础

    一些定义

    性质

    • 费马小定理

    定理内容

    证明

    • 欧几里得算法(gcd)

    定理内容&证明

    扩展欧几里得算法(exgcd)

    定理内容&证明

    • 欧拉函数

    定义

    通项公式

    性质

    • 莫比乌斯函数

    定义

    性质

    莫比乌斯反演

    • 筛法

    质数筛法

    暴力筛

    埃氏筛法

    线筛

    欧拉函数线性筛

    莫比乌斯函数线性筛

    逆元线性筛

    • Baby-Step-Giant-Step(大步小步算法)

    exbsgs(扩展bsgs)

    • 中国剩余定理(crt)

    扩展中国剩余定理(excrt)

    • Lucas定理

    扩展Lucas定理(exlucas)

    • 杜教筛

     


    数论基础

    质数

    定义:因数只有1和它本身的数(1不算质数)

    取模

    两数相除的余数(如7对4取模=3,一般用 $mod$ 或 % 表示取模)%清华学姐clz

    取模与乘除运算优先级同级

    整除

    如果a除b(注意是除不是除以)能得到一个整数,则称a整除b,记作a|b

    同余

    如果两个整数a,b满足一个模数m|a-b,则称整数a与b对模m同余,记作 $a$ $equiv$ $b$ $pmod{m}$

    最大公因数

    几个数中最大的公因数就是最大公因数,记作$gcd(a,b)$,也可记作$(a,b)$

    $gcd(a_{1},a_{2},a_{3}.....a_{n})$ $=$ $gcd(gcd(gcd(gcd(a_{1},a_{2}),a_{3}),a_{4})..........,a_{n})$

    最小公倍数

    几个数中最小的公倍数就是最小公倍数,记作$lcm(a,b)$

    易证两个数的最小公倍数 $=$ 它们的乘积除以最大公因数

    互质

    指两数最小公倍数为1

    阶乘

    $1 imes 2 imes .... imes n = prod_{i=1}^{n}i = n!$

    性质

    $(a$ $+$ $b)$ $mod$ $m$ $=$ $a$ $mod$ $m$ $+$ $b$ $mod$ $m$

    $a$ $cdot$ $b$ $mod$ $m$ $=$ $(a$ $mod$ $m)$ $cdot$ $(b$ $mod$ $m)$

    $a$ $-$ $b$ $mod$ $m$ $=$ $a$ $mod$ $m$ $-$ $b$ $mod m$ (注意大部分语言的%之后会是负的:如-11 % 4 = -3,所以大部分时候要把(得出的答案+模数)% 模数

    (以上三条性质易证)

    $a$ $div$ $b$ $mod$ $m$ 不一定等于 $a$ $mod$ $m$ $div$ $(b$ $mod$ $m)$

    为什么呢?

    因为除法默认下取整,所以直接模会有问题

    所以再引入一个东西

    逆元

    如果一个整数x满足$a$ $cdot$ $x$ $equiv$ $1$ $pmod{m}$ ,则称x是a关于模m的逆,一般记作$a^{-1}$

    逆元是广义化了的倒数

    所以在模运算中,除以一个数相当于乘这个数的逆元

    对于整数a,m逆元存在当且仅当 $gcd(a,m)$ $=$ $1$

    必要性证明

    反证法:设 $d$ $=$ $gcd(a,m)$ $>$ $1$ ,$b cdot d = a$,$n cdot d = m$,且 $b,n$ $in$ $mathbb{Z}$

    $ecause$ $a$ $cdot$ $x$ $=$ $1$ $pmod{m}$

    $ herefore$ $a$ $cdot$ $x$ $+$ $k$ $cdot$ $m$ $=$ $1$, $k$ $in$ $mathbb{Z}$

    $ herefore$ $d$ $cdot$ $($ $b$ $cdot$ $x$ $+$ $n$ $ imes$ $k$ $)$ $=$ $1$

    设$A$ $=$ $b$ $cdot$ $x$ $+$ $n$ $cdot$ $k$,显然$A$ $in$ $mathbb{Z}$

    $ herefore$ $A$ $=$ $frac{1}{d}$

    $ herefore$ $d$ $>$ $1$

    $ herefore$ $A$ $=$ $d$ $ otin$ $mathbb{Z}$

    这与 $A$ $in$ $mathbb{Z}$ 矛盾

    $ herefore$ 当逆元存在时,$gcd(1,m)$ $=$ $1$

    充分性证明详见后面的扩展欧几里得的证明

    数学用语

     存在$exists$,所有的/任意的$forall$,质数集$mathbb{P}$,自然数集$mathbb{N}$,整数集$mathbb{Z}$,有理数集$mathbb{Q}$,实数集$mathbb{R}$,复数集$mathbb{C}$   女装QRC(NZQRC)

    属于$in$,不属于$ otin$

    (不懂得稍微百度一下?)

     


     费马小定理

    讲了那么多,那么到底怎么求逆元呢?

    定理内容

    如果对于a,p,$a$ $in$ $mathbb{Z}$,$p$ $in$ $mathbb{P}$(质数集),$gcd(a,p)$ $=$ $1$ (等价于a不是p的倍数),则$a^{p-1}$ = $1$

    $a^{p-2}$ $ imes$ $a$ $=$ $1$

    $a^{p-2}$ 即为a的逆元

    下面给出证明

    证明

     引理1:如果 $a cdot c equiv b cdot c pmod m$ ,且 $(c,m) = 1$ ,则$a equiv b pmod m$

    $ecause a cdot c equiv b cdot c pmod m$

    $ herefore a cdot c - b cdot c equiv 0 pmod m$

    $ herefore (a - b) cdot c equiv 0 pmod m$

    $ecause (c,m) = 1$

    $ herefore$ 存在c的逆元

    $ herefore$ 两边同时乘上  $c^{-1}$

    $ herefore a - b equiv 0 pmod m$

    $ herefore a equiv b pmod m$

    引理2:定义对于数列A,满足A的大小为m且对于$forall i,j ( i  eq j)$满足$a_{i}  otequiv a_{j} pmod m$,则称A构成模m的完全剩余系

    当$a_{0},a_{1},.....,a_{m-1}$构成模m的完全剩余系,$b in mathbb{Z}$,$(b,m) = 1$,则$b cdot a_{0},b cdot a_{1},.......,b cdot a_{m-1}$也构成模m的完全剩余系

    反证法

    若$b cdot a_{0},b cdot a_{1},.......,b cdot a_{m-1}$不构成模m的完全剩余系,则$exists i,j (i eq j)$满足$b cdot a_{i} equiv b cdot a_{j} pmod m$

    $ herefore$ 根据引理1,$a_{i} equiv a_{j} pmod m$

    这与完全剩余系的定义相矛盾

    $ herefore$ 引理2得证

    引理3:若$A =$ {$0,a_{1},a_{2},....,a_{m-1}$},$B =$ {$0,b_{1},b_{2},....,b_{m-1}$}分别构成模m的剩余系,则$a_{1} cdot a_{2} cdot .... cdot a_{m-1} equiv b_{1} cdot b_{2} cdot .... cdot b_{m-1} pmod m$

    因为A是模m的完全剩余系

    所以对于每个i,$a_{i} equiv$ 1~m-1的一个不同的数

    B同理

    所以对于每个i,都有不同的j使得$a_{i} equiv b_{j} pmod m$

    所以设排列C使得$a_{i} equiv b_{c_{i}} pmod m$

    所以$a_{1} cdot a_{2} cdot .... cdot a_{m-1} equiv b_{c_{1}} cdot b_{c_{2}} cdot ... cdot b_{c_{m-1}} pmod m$

    所以$a_{1} cdot a_{2} cdot .... cdot a_{m-1} equiv b_{1} cdot b_{2} cdot .... cdot b_{m-1} pmod m$

    我们构造一个模m的剩余系{$0,1,2,3,...,m-1$}

    根据引理2,{$0,a,2a,3a,....,(m-1)a$}也是模m的剩余系

     根据引理3,$1 imes 2 imes .... imes (m-1) equiv a cdot 2a cdot ... cdot (m-1)a pmod m$

    $ herefore 1 imes 2 imes .... imes (m-1) equiv (1 imes 2 imes .... imes (m-1)) cdot a^{p-1} pmod m$

    显然$1 imes 2 imes .... imes (m-1)$与m互质

    $ herefore$ 根据引理1,$a^{p-1} equiv 1 pmod m$

    得证

     复杂度&主要代码实现

    快速幂

    时间:O($log_2m$)

    空间:O(1)

    条件:模数m为质数,$(a,m) = 1$


    欧几里得算法(exgcd)

    这时候就有人要说了:

    “哎呀,费马小定理好菜啊,只能求模数为质数的情况”

    别急,下面就给出模数不为质数的情况

    定理内容

    设整数a>整数b,则

    $gcd(a,b) = egin{cases}
     a & ext{  } b = 0\
     gcd(b,a mod b) & ext{  } b eq 0
    end{cases}$

    证明

    当b = 0时显然

    当$b eq 0$时,设$a = k cdot b + r$,$k,r in mathbb{Z}$,$|r| leq |b|$

    则$r = k cdot b - a$,$a mod b = r$

    设d为a,b的任意一个公因数,即d|a且d|b

    则$r / d = k cdot b / d - a / d$

    显然等式右边是个整数,则等式左边也是个整数,即d|r

    显然对于任意的一个r和b的公因数e,e|a

    所以a,b的公因数集合与r,b的公因数集合相等

    则它们的最大公因数也会相等

    所以$gcd(a,b) = gcd(r,b) =gcd(a mod b,b)$

    复杂度&主要代码实现

    直接递归调用

    时间:最坏O($log_2Min(a,b)$),当数据为斐波那契数列时才会卡到这个上界

    空间:O(1)

    扩展欧几里得算法(exgcd)

    用以求解一组解(x,y)使得a*x+b*y=gcd(x,y)

    操作

    若b为0,则x=1,y=0

    若b不为0,则递归调用求出exgcd(b,a%b)的解$x_{2} , y_{2}$,则此时解$x_{1} = y_{2} , y_{1} = x_{2} - [a/b] cdot y_{2}$

    [a]为取整函数(下取整),其作用为舍去实数a的小数部分,只保留整数部分

    用途

    求逆元

    对于$a cdot x equiv 1 pmod m$

    $exists k in mathbb{Z}$使得$a cdot x + k cdot m = 1$

    因为$(a,m) = 1$

    所以求出的x就是逆元了

    证明

     依然设a>b

    若此时$b = 0$,则$gcd(a,b) = a = 1 cdot a + 0 cdot b$,所以$x = 1 , y = 0$

    若此时$b eq 0$,则设$x_{1} cdot a + y_{1} cdot b = gcd(a,b)$,$x_{2} cdot b + y_{2} cdot (a mod b) = gcd(b,a mod b)$

    因为$gcd(a,b) = gcd(b,a mod b)$(根据普通的欧几里得算法)

    所以$x_{1} cdot a + y_{1} cdot b = x_{2} cdot b + y_{2} cdot (a mod b) = x_{2} cdot b + y_{2} cdot (a - [a/b] cdot b) = x_{2} cdot b + y_{2} cdot a - y_{2} cdot [a/b] cdot b = y_{2} cdot a + (x_{2} - y_{2} cdot [a/b]) cdot b$

     显然$x_{1} = y_{2} , y_{1} = x_{2} - [a/b] cdot y_{2}$是一组解

    因为当gcd为1一定能求出逆元,所以逆元存在当且仅当$gcd(a,m) = 1$的充分性得证

    复杂度

    与gcd一样:最坏O($log_2Min(a,b)$)

     只是多了些小常数

    那天蒟蒻终于想起了,被卡常支配的恐惧


     

    欧拉函数

     定义

    指小于等于n中与n互质的正整数的个数,记作$varphi (n)$

  • 相关阅读:
    表单提交时,更新的操作
    提交后刷新本页面与移除本页面的JS写法
    jquery的$.each如何退出循环和退出本次循环
    修改本机host文件,使upf报表操作变的快
    代码记录
    JQuery简介
    Ubuntu安装
    PHP笔记(PHP高级篇)
    将Session写入Memcache
    将Session写入数据库
  • 原文地址:https://www.cnblogs.com/zzpcd/p/10332435.html
Copyright © 2011-2022 走看看