zoukankan      html  css  js  c++  java
  • 欧拉函数

    欧拉函数

    φ(x): 小于等于x中与其互质的数的个数。

     

    模板:

    int get_phi(int x)
    {
        int ret=1;
        for(int i=1;prime[i]*prime[i]<=x;i++)
        {
            if(x%prime[i]==0)
            {
                ret*=prime[i]-1;x/=prime[i];
                while(x%prime[i]==0) x/=prime[i],ret*=prime[i];
            }
        }
        if(x>1) ret*=x-1;
        return ret;
    }

     

    性质:

    1.  phi(p) == p-1 因为素数p除了1以外的因子只有p,所以与 p 互素的个数是 p - 1个

     

    2. phi(p^k) == p^k - p^(k-1) == (p-1) * p^(k-1)

    证明:

    令n == p^k,小于 n 的正整数共有 p^k-1 个,其中与 p 不互素的个数共 p^(k-1)-1 个,它们是 1*p,2*p,3*p ... (p^(k-1)-1)*p

    所以phi(p^k) == (p^k-1) - (p^(k-1)-1) == p^k - p^(k-1) == (p-1) * p^(k-1)。


    3. 如果i mod p == 0, 那么 phi(i * p) == p * phi(i) (证明略)

    举个例子:

    假设 p = 3,i = 6,p * i = 18 = 2 * 3^2;

    phi(3 * 6) == 18*(1-1/2)*(1-1/3) = 6

    p * phi(i) = 3 * phi(6) = 3 * 6 * (1-1/2) *  (1-1/3) = 6 = phi(i * p) 正确

     

    4. 如果i mod p != 0, 那么 phi(i * p) == phi(i) * (p-1) 

    证明:

    i mod p 不为0且p为质数, 所以i与p互质, 那么根据积性函数的性质 phi(i * p) == phi(i) * phi(p) 其中phi(p) == p-1

    所以 phi(i * p) == phi(i) * (p-1).

    再举个例子:

    假设i = 4, p = 3, i * p = 3 * 4 = 12

    phi(12) = 12 * (1-1/2) * (1-1/3) = 4

    phi(i) * (p-1) = phi(4) * (3-1) = 4 * (1-1/2) * 2 = 4 = phi(i * p)正确

     

    线筛欧拉函数模板:

    void init()
    {
        phi[1]=1;
        for(int i=2;i<N;i++)
        {
            if(!no[i]) pri[++cnt]=i,phi[i]=i-1;
            for(int j=1;j<=cnt;j++)
            {
                if(i*pri[j]>N) break;
                no[i*pri[j]]=1;
                if(i%pri[j]==0){phi[i*pri[j]]=pri[j]*phi[i];break;}
                else phi[i*pri[j]]=phi[i]*(pri[j]-1);
            }
        }
    }

     

     1.bzoj2190 仪仗队

    https://www.cnblogs.com/L-Memory/p/7241727.html

     

  • 相关阅读:
    78. Subsets
    93. Restore IP Addresses
    71. Simplify Path
    82. Remove Duplicates from Sorted List II
    95. Unique Binary Search Trees II
    96. Unique Binary Search Trees
    312. Burst Balloons
    程序员社交平台
    APP Store开发指南
    iOS框架搭建(MVC,自定义TabBar)--微博搭建为例
  • 原文地址:https://www.cnblogs.com/L-Memory/p/9919151.html
Copyright © 2011-2022 走看看