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

    /*http://baike.baidu.com/view/107769.htm
    * 欧拉函数:

    定义:用于计算 p(n),小于等于n的所有与n互质的数的个数。例如p[8]=4,(1,3,5,7)

    计算公式:p(n)=n*(1-1/p1)*(1-1/p2)....*(1-1/pk)【p1,p2,pk都是n的素因子】

    另:若n=p1^q1*p2^q2*.....*pk^qk

    则,p(n)=(p1-1)*p1^(q1-1)*(p1-1)*p2^(q2-1)......*(pk-1)*pk^(qk-1)

    性质:若m,n互质,φ(mn)=φ(m)φ(n)。当n为奇数时,φ(2n)=φ(n)
    */

    求欧拉函数 eluer[n]:

    View Code
     1 //求欧拉函数的模板:
     2 
     3 int euler(int n)//返回euler(n)
     4 {
     5      int i;
     6      int res = n,a = n;
     7      for(i = 2;i*i <= a; ++i)
     8      {
     9          if(a%i == 0)
    10          {
    11              res -= res/i; //p(n) = (p - p/p1)(1 - 1/p2)......
    12              while(a%i == 0) a/=i;
    13          }
    14      }
    15      if(a > 1) res -= res/a;//存在大于sqrt(a)的质因子
    16      return res;
    17 }

    打表:

    View Code
     1 #define MAXN 1000010
     2 
     3 long long euler[MAXN];//sum_euler[i]表示2-->i的欧拉数和
     4 int n;
     5 void get_euler()
     6 {
     7     int i,j;
     8     euler[1]=1;
     9     for(i=2;i<MAXN;i++)
    10         euler[i]=i;
    11     for(i=2;i<MAXN;i++)
    12         if(euler[i]==i)//这里满足的肯定是素数
    13         {
    14             for(j=i;j<MAXN;j+=i)//更新含有它的数
    15                 euler[j]=euler[j]/i*(i-1);//:p(n)=n*(1-1/p1)*(1-1/p2)....*(1-1/pk)
    16         }
    17 }
  • 相关阅读:
    python 列表、元组、字典总结
    python 字典
    python 元组
    python 列表
    JMeter的作用域与执行顺序
    JMeter第一个实战
    JMeter录制的两种方法
    JMeter常用功能
    初识jmeter2
    handler的拒绝策略:
  • 原文地址:https://www.cnblogs.com/Missa/p/2719235.html
Copyright © 2011-2022 走看看