码迷,mamicode.com
首页 > 其他好文 > 详细

浅谈欧拉函数 By cellur925

时间:2018-10-09 00:32:28      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:ali   for   质因数   sigma   party   color   dfa   col   3ds   

1.某神犇Blog 学了三遍的 欧拉函数φ--DEADFISH7

2.我要做一些补充o(* ̄▽ ̄*)o

  $φ(1)=1$;

  公式有两种形式,一种有太多除法,实际可能会慢些。通用技术分享图片

  对于任意$n$>1,1~$n$中与$n$互质的数之和等于$n*φ(n)/2$。

  是积性函数。

  $sigma(d|n) φ(d)=n$。

代码实现

1°:朴素的质因数分解顺便求出

void init_phi()
{
    int ans=n;
    for(int i=2;i<=sqrt(n);i++)
    {
        if(n%i==0)
        {
            ans=ans/i*(i-1);
            while(n%i==0) n/=i;
        }
        if(n>1) ans=ans/n*(n-1);
    }
}

适用于单个查询的情况,但是效率有点低,$O(sqrt(n))$,嘤。

2°:线性筛素数,顺便把欧拉函数也整出来。(适用于递推,连续1~n)

在线性筛板子上稍加修改即可,复杂度$O(n)$。

void init_phi()
{
    phi[1]=1;
    for(int i=2;i<=lim;i++)
    {
        if(v[i]==0)
        {
            prime[++m]=i;
            v[i]=i;
            phi[i]=i-1;
        }
        for(int j=1;j<=m;j++)
        {
            if(prime[j]>v[i]||prime[j]>lim/i) break;
            v[i*prime[j]]=prime[j];
            phi[i*prime[j]]=phi[i]*(i%prime[j] ? prime[j]-1 :prime[j]);
        }
    }
}

例题 仪仗队

浅谈欧拉函数 By cellur925

标签:ali   for   质因数   sigma   party   color   dfa   col   3ds   

原文地址:https://www.cnblogs.com/nopartyfoucaodong/p/9757946.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!