2023-11-13 11:43阅读: 37评论: 1推荐: 2

素数相关

筛法

埃氏筛

O(nloglogn)

inline void primes(int n)
{
    memset(v,0,sizeof v);
    for(int i = 2;i <= n;i++){
        if(v[i]) continue;
        p.push_back(i);
        for(int j=i;j<=n/i;j++) v[j*i]=1;
    }
}

线性筛

O(n)

inline void xxs(int n)
{
    memset(v,0,sizeof v);
    m=0;
    for(int i = 2;i <= n;i++){
        if(!v[i]) p[++m]=i;
        for(int j = 1;j <= m;j++){
            if(p[j]*i>n) break;
            v[i*p[j]]=1;
            if(i%p[j]==0)break;
        }
    }
}

欧拉函数

φ(x) 表示小于等于 x 的正整数中与 x 互质的数的数量。规定 φ(1)=1

性质

  1. p 为质数, φ(pn)=pn1(p1)
  2. a|xφ(ax)=aφ(x)
  3. a,b 互质,φ(a)φ(b)=φ(ab)

性质 1 证明:

小于等于 pn 的正整数中,不与 pn 互质的只有 p,2p,3p,...,pn1ppn1 个数,φ(pn)=pnpn1=pn1(p1)

求欧拉函数

单次求欧拉函数

pi 表示 x 的质因数。

φ(x)=xpi1pi

x 质因分解即可,时间复杂度 O(n)


证明:

x=piki

由性质 3 可得:

φ(x)=φ(piki)

由性质 2 可变为:

φ(x)=piki1(pi1)=piki1pi(pi1)

piki 提出来得 x ,即:

φ(x)=xpi1pi

求 1~n 的欧拉函数

与线性筛相结合。

  • x 为质数,φ(x)=x1 。(性质 1
  • 否则对于 x 的质因数 pφ(x)={pφ(xp)         (p|xp)    2φ(p)φ(xp)   (pxp)  3

时间复杂度 O(N)

void primes(int n)
{
    memset(v,0,sizeof v);
    m=0;
    phi[1]=1;
    for(int i = 2;i<= n;i++){
        if(!v[i]) p[++m]=i,phi[i]=i-1;
        for(int j = 1;j <= m;j++){
            if(p[j]*i>n) break;
            v[i*p[j]]=1;
            if(i%p[j]==0) {phi[i*p[j]]=p[j]*phi[i];break;}
            else phi[i*p[j]]=phi[p[j]]*phi[i];
        }
    }
}

欧拉定理

若正整数 am 互质,则

aφ(m)1(modm)

m 为质数时,退化为费马小定理 ap11(modp)

推论:

ababmodφ(m)(modm)

利用这个推论可以在 b 很大的情况下求出 ab(modm)

扩展欧拉定理

bφ(m) ,则:

ababmodφ(m)+φ(m)(modm)

posted @   tkt  阅读(37)  评论(1编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起