• 欧拉函数


    欧拉函数的性质:

    1)   p^k型欧拉函数:

    若N是质数p(即N=p), φ(n)= φ(p)=p-p^(k-1)=p-1。

    若N是质数p的k次幂(即N=p^k),φ(n)=p^k-p^(k-1)=(p-1)p^(k-1)。

    (2)mn型欧拉函数

    设n为正整数,以φ(n)表示不超过n且与n互素的正整数的个数,称为n的欧拉函数值。若m,n互质,φ(mn)=φ(m)φ(n)

    (3)特殊性质:

    若n为奇数时,φ(2n)=φ(n)。

    对于任何两个互质 的正整数a,n(n>2)有:a^φ(n)=1 mod n (恒等于)此公式即 欧拉定理

    当n=p 且 a与素数p互质(即:gcd(a,p)=1)则上式有: a^(p-1)=1 mod n (恒等于)此公式即 费马小定理

    (4)对于n,p为n的素因子

    φ(p*n) = p*φ(n)(由最根本的定理可知)

    相关证明:https://www.cnblogs.com/handsomecui/p/4755455.html

    欧拉函数模板

     1 int euler_phi(int n)//求单个
     2 {
     3     int m = (int)sqrt(n + 0.5);
     4     int ans = n;
     5     for(int i = 2; i <= m; i++)if(n % i == 0)
     6     {
     7         ans = ans / i * (i - 1);
     8         while(n % i == 0)n /= i;
     9     }
    10     if(n > 1)ans = ans / n * (n - 1);
    11     return ans;
    12 }
    13 void phi_table(int n, int* phi)//打表
    14 {
    15     for(int i = 0; i <= n; i++)phi[i] = i;
    16     for(int i = 2; i <= n; i++)if(phi[i] == i)
    17         for(int j = i; j <= n; j += i)phi[j] = phi[j] / i * (i - 1);
    18 }
     1 void phi_table(int n)//稍微快一点的打表 
    2 { 3 phi[1] = 1; 4 for(int i = 2; i <= n; i++) 5 { 6 if(!phi[i])//素数 7 { 8 for(int j = i; j <= n; j += i) 9 { 10 if(!phi[j])phi[j] = j; 11 phi[j] = phi[j] / i * (i - 1); 12 } 13 } 14 } 15 }
     1 ll phi[maxn];
     2 ll prime[maxn];
     3 bool not_prime[maxn];
     4 int cnt;
     5 void phi_table(int n)//最快打表 O(n)
     6 {
     7     phi[1] = 1;
     8     for(int i = 2; i <= n; i++)
     9     {
    10         if(!not_prime[i])//素数
    11         {
    12             prime[++cnt] = i;
    13             phi[i] = i - 1;
    14         }
    15         for(int j = 1; j <= cnt && i * prime[j] <= n; j++)
    16         {
    17             not_prime[i * prime[j]] = 1;
    18             if(i % prime[j] == 0)//第j个素数是i的因子
    19             {
    20                 phi[i * prime[j]] = phi[i] * prime[j];
    21                 break;
    22             }
    23             else phi[i * prime[j]] = phi[i] * (prime[j] - 1);
    24         }
    25     }
    26 }
  • 相关阅读:
    【02】AJAX XMLHttpRequest对象
    【01】什么是AJAX
    NPM是什么
    nodejs npm常用命令
    angular(转)
    s6 传输层
    s6-9 TCP 定时器
    s6-8 TCP 拥塞控制
    s6-7 TCP 传输策略
    s6-6 TCP 连接释放
  • 原文地址:https://www.cnblogs.com/fzl194/p/9017174.html
Copyright © 2020-2023  润新知