zoukankan      html  css  js  c++  java
  • 数论知识(2)-------------欧拉函数

    欧拉函数:一个整数n,小于且和n互质的正整数的个数(包含1)的个数,用φ(n)表示。

    完全余数集合:欧拉函数中与n互质的数字的集合.

    ~~~~~~~~~~~~~~

    性质:

    如果n是素数,则 φ(n)=n-1;

    求一个数n的所有互素和  sum=φ(n)*n/2;   <==这个性质,很有用。

    欧拉定理 :
    对于互质的正整数 和 ,有 (n)  ≡ 1 mod n  。

    费马定理 :
    若正整数 与素数 互质,则有 ap - 1 ≡ 1 mod p 。
    证明这个定理非常简单,由于 φ(p) = p -1,代入欧拉定理即可证明。

    ~~~~~~~~~~~~~~~~~~~~~~

    补充欧拉公式:

    1. pk 的欧拉函数

    对于给定的一个素数 , φ(p) = p -1。则对于正整数 n = pk ,

    φ(n) = pk - pk -1

    2. p * q 的欧拉函数

    假设 p, q是两个互质的正整数,则 p * q 的欧拉函数为

    φ(p * q) = φ(p) * φ(q) , gcd(p, q) = 1 

    3.任意正整数的欧拉函数

    φ(n) =n*(1-1/k1)*(1-1/k2)*......*(1-1/km);

    k1,k2...km是n的素数因子

    ________________________________________

    欧拉单点求值

     1 int Euler(int n)
     2 {
     3     int temp=n,i;
     4     for(i=2;i*i<=n;i++)
     5     {
     6        if(n%i==0)
     7        {
     8            while(n%i==0)
     9            n=n/i;
    10            temp=temp/i*(i-1);
    11        }
    12     }
    13     if(n!=1) temp=temp/n*(n-1);
    14     return temp;
    15 }

     欧拉函数打表

     1 void Euler() //欧拉打表。
     2 {
     3     int i,j;
     4     for(i=2;i<=3000000;i++)
     5     opl[i]=i;
     6     opl[1]=0;
     7 
     8     for(i=2;i<=3000000;i++)
     9     if(s[i]==false)
    10     {
    11         for(j=i;j<=3000000;j=j+i)
    12         {
    13             opl[j]=opl[j]/i*(i-1);
    14             s[j]=true;
    15         }
    16     }
    17 }

    还有一种是素数和欧拉表分开的,速度更快。在欧拉题目里有。

  • 相关阅读:
    WINCE6.0 error C2220: warning treated as error问题解决
    GPRS连接失败问题
    wince下sourcessources.cmnMakefile.def的相关作用
    IMX515开发备忘
    WINCE补丁包下载地址
    IMX51+WINCE6.0平台缩写意义
    喵哈哈村的魔法考试 Round #1 (Div.2) ABCD
    Codeforces Round #402 (Div. 2) D
    Codeforces Round #402 (Div. 2) C
    Codeforces Round #402 (Div. 2) B
  • 原文地址:https://www.cnblogs.com/tom987690183/p/3242668.html
Copyright © 2011-2022 走看看