• 欧拉函数


    转载: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 }
  • 相关阅读:
    黄聪:C#中CefSharp的简单使用
    ArcGIS Pro关闭窗口和退出
    AddOverlay
    ArcGIS Pro固定纸张限定比例尺自动调整纵横打印
    ArcGIS pro增加一个独立表到地图
    ArcGIS Pro How to remove standalone table from contents
    ArcGIS Pro的进度条
    CreatePolygonGraphicElement
    Creating a Group with a List of Elements
    ArcGISPro理解多线程
  • 原文地址:https://www.cnblogs.com/jrjxt/p/12245755.html
Copyright © 2020-2023  润新知