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

    转载:https://blog.csdn.net/liuzibujian/article/details/81086324

    欧拉函数φ(n)是1~n-1的与n互质的数的个数

    通式:φ(x) = x * (1 - 1/p1) * (1 - 1/p2) * ......; (pi 为x所有质因子);欧拉函数的几个性质

    1.对于质数p,φ(p)=p−1φ(p)=p-1φ(p)=p−1。
    2.若p为质数,n=pkn=p^kn=p
    k
    ,则φ(n)φ(n)φ(n)=pkp^kp
    k
    -pk−1p^{k-1}p
    k−1

    3.欧拉函数是积性函数,但不是完全积性函数。若m,n互质,则φ(m∗n)=φ(m)∗φ(n)φ(m*n)=φ(m)*φ(n)φ(m∗n)=φ(m)∗φ(n)。特殊的,当m=2,n为奇数时,φ(2*n)=φ(n)。
    4.当n>2时,φ(n)是偶数。
    5.小于n的数中,与n互质的数的总和为:φ(n) * n / 2 (n>1)。
    6.n=∑d∣nφ(d)n=sum_{d|n}{φ(d)}n=∑
    d∣n

    φ(d),即n的因数(包括1和它自己)的欧拉函数之和等于n。

    埃拉托斯特尼筛求欧拉函数

     1 void solve(int n)
     2 {
     3 
     4       for(int i = 1; i <= n; i++) p[i] = i;
     5       for(int i = 2; i <= n; i++)
     6       if(p[i] == i){
     7         for(int j = i; j <= n; j+= i)
     8          p[j] = p[j] / i * (i-1);
     9       }
    10 }

    欧拉筛求欧拉函数

     1 void euler(int n)
     2 {
     3     phi[1]=1;//1要特判 
     4     for (int i=2;i<=n;i++)
     5     {
     6         if (flag[i]==0)//这代表i是质数 
     7         {
     8             prime[++num]=i;
     9             phi[i]=i-1;
    10         }
    11         for (int j=1;j<=num&&prime[j]*i<=n;j++)//经典的欧拉筛写法 
    12         {
    13             flag[i*prime[j]]=1;//先把这个合数标记掉 
    14             if (i%prime[j]==0)
    15             {
    16                 phi[i*prime[j]]=phi[i]*prime[j];//若prime[j]是i的质因子,则根据计算公式,i已经包括i*prime[j]的所有质因子 
    17                 break;//经典欧拉筛的核心语句,这样能保证每个数只会被自己最小的因子筛掉一次 
    18             }
    19             else phi[i*prime[j]]=phi[i]*phi[prime[j]];//利用了欧拉函数是个积性函数的性质 
    20         }
    21     }
    22 }
  • 相关阅读:
    上一张作业day16
    python 函数递归,三元表达式解读,匿名一次性函数,模块略解
    迭代器,生成器与内置函数
    闭合函数和装饰器
    函数的其他关键点*与**,函数的对象可以当做变量去使用,函数的嵌套,名称空间
    python函数,应用与讲解
    文件处理方式
    html-04 html骨架
    html-03 Web标准
    html-02 浏览器内核
  • 原文地址:https://www.cnblogs.com/jrjxt/p/12245755.html
Copyright © 2011-2022 走看看