zoukankan      html  css  js  c++  java
  • 浅谈欧拉函数 By cellur925

    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]);
            }
        }
    }

    例题 仪仗队

  • 相关阅读:
    html,css,javascript 总结
    Java总结2
    Java总结1
    Java学习第5天
    Java学习第4天
    Java学习第3天
    java 学习第二天
    java学习第一天
    markdown 学习
    django——django链接mysql数据库
  • 原文地址:https://www.cnblogs.com/nopartyfoucaodong/p/9757946.html
Copyright © 2011-2022 走看看