zoukankan      html  css  js  c++  java
  • 清北学堂—2020.1提高储备营—Day 4 morning(数论)

    qbxt Day 4 morning

    ——2020.1.20 济南 主讲:李奥

    目录一览

    1.一些符号与基本知识
    2.拓展欧几里得,逆元与欧拉定理
    3.线性筛法与积性函数(非重点)

    总知识点:数论

    一、一些符号和基本知识

    1.数论常用符号
    (1).(x,y):x与y的最大公因数,即gcd(x,y)
    (2).[x,y]:x与y的最小公倍数,即lcm(x,y)
    (3).x≡y(mod n):x与y在模n意义下同余
    (4).Def:定义(define)
    (5).Thm:定理(theorem)
    (6). ⇔:等价(充分必要条件)
    (7).a|b:表示a整除b,即b是a的倍数,a是b的因子
    2.基本知识
    (1)快速幂
    计算a^k mod n
    时间复杂度O(log(k))

    inline long long power(long long a, long long k){
        int ans=1;
        while(k){
            if(k&1)ans=ans*a%n;
            k>>=1;
            a=a*a%n;
        }
        return ans;
    }
    

    (2)辗转相除法(欧几里得算法):计算x,y的最小公倍数
    时间复杂度O(log(max(x,y)))

    inline int gcd(int x,int y){
        if(y==0)return x;
        return gcd(y,x%y);
    }
    

    二、拓展欧几里得算法

    1.内容:一定存在整数a,b,使得ax+by=(x,y)
    2.证明过程:
    gcd(x,y)->gcd(y,x%y)
    gcd(x,y)->gcd(y,x-⌊x/y⌋y)
    如果已知a’y+b’(x- ⌊x/y⌋ y)=(x,y)
    整理得b’x+(a’-b’⌊x/y⌋)y=(x,y)
    最底层:x’=(x,y),y’=0
    显然有1
    x’+0
    y’=(x,y)
    于是可以递归求出a,b

    3.代码:

    inline int exgcd(int x,int y,int &a,int &b){
    	if(y==0){
    		a=1;
    		b=0;
    		return x;
    	}
    	int aa,bb,ans;
    	ans=exgcd(y,x%y,aa,bb);
    	a=bb;b=aa-bb*(x/y);
    	return ans;
    }
    

    三、逆元

    1.Def: 如果xy≡1(mod n),则在模n意义下,y为x的逆元,记为x-1
    如果逆元存在,逆元有什么用?
    x在模n意义下逆元是否存在?
    ∃y∈Z, xy≡1(mod n) ⇔ ∃ y, ∃y∈Z ,k∈Z xy+kn=1 ⇔ (x,n)=1
    Thm:x在模n意义有逆元当且仅当(x,n)=1

    2.计算方法:直接使用exgcd
    其它计算方法:
    线性求逆元
    设n是一个质数,那么1到n-1都与n互质,因此1到n-1在模n意义下都有逆元(1的逆元为1)
    对x(1<x<n)求逆元

    设a=⌊n/x⌋,b=n%x
    n=ax+b
    b=-a
    x
    b-1b=-b-1a x
    1≡-b-1
    a
    x(mod n)
    -b-1*a即为x的逆元
    x的逆元可以用比他小的数的逆元得到

    递推可以求得1到n-1在模n意义下的逆元

    代码:

    inv[1]=1;
    for(i=2;i<=n-1;i++)
       inv[i]=(n-inv[n%i]*(n/i)%n)%n;
    

    四、欧拉定理

    (1)欧拉函数φ
    Def : φ(i)表示1到i中有多少个数与i互质(i∈N+)
    对于质数p
    φ(p)=p-1
    φ(pk)=(p-1)*pk-1
    (2)定理内容
    若a与n互质,则aφ(n) ≡1(mod n)
    推论:若a与n互质,x≡y(mod φ(n)),则ax≡ay(mod n)

    aφ(n)≡1(mod n)
    a*aφ(n)-1≡1(mod n)
    aφ(n)-1 即为a在模n意义下的逆元
    当n为质数时,a的逆元为an-2

    五.积性函数

    (1)Def:对于一个定义域为N+或是1到n的函数f(x),如果满足以下两条性质,称其为积性函数
    1.f(1)=1
    2.∀a,b∈N+ ,若(a,b)=1,则f(a)f(b)=f(ab)

    Def:对于一个定义域为N+或是1到n的函数f(x),如果满足以下两条性质,称其为完全积性函数
    1.f(1)=1
    2.∀a,b∈N+ , 则f(a)f(b)=f(ab)

    (2)常见的积性函数举例
    Id:单位函数,Id(x)=x
    Idk:幂函数,Idk (x)=xk
    φ:欧拉函数
    μ:莫比乌斯函数
    ∊:单元函数 ∊(1)=1, ∊(x)=0(∀x≥2)
    1:1(x)=1 (∀x≥1)
    d:d(x)表示x的约数个数

    (3)
    线性筛积性函数
    对于积性函数f
    在较小时间复杂度内算出f(pk)
    对于含有多个质因子的数x,记录x除尽MinP[x]因子后的值,记为w[x]

    代码:

    f[1]=1;
    for(i=2;i<=n;i++){
       int j=i/MinP[i];
       if(MinP[j]==MinP[i]) w[i]=w[j];
       else w[i]=j;
       if(w[i]==1){
          //i为pk,直接计算
       }
       else f[i]=f[w[i]]*f[i/w[i]];
    }
    

    --------------------------------------------------THE END-------------------------------------------------

    本文欢迎转载,转载时请注明本文链接
  • 相关阅读:
    unity 反编译 step2 dll -->reflector
    unity 反编译 step1 disUnity
    rpg
    cmake使用
    linux mysqld的启动过程
    unity内存加载和释放
    Linux下MySql数据库常用操作
    MySQL主从复制与读写分离(非原创,谢绝膜拜)
    linux下IPTABLES配置详解
    linux下查看端口的占用情况
  • 原文地址:https://www.cnblogs.com/-pwl/p/12303006.html
Copyright © 2011-2022 走看看