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

    在数论,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)。此函数以其首名研究者欧拉命名(Euler'so totient function),它又称为Euler's totient function、φ函数、欧拉商数等。 例如φ(10)=5,因为1,3,5,7,9均和10互质。

    公式如下:

    下面我写下我理解的证明过程

    ①对于给定的一个素数P,它φ(P) = P – 1。则对于正整数n = P^k,φ(n) =P^k – P^(k-1)。

    证明:

           小于P^k的正整数有P^k – 1个,其中和P^k不互质的正整数有{P*1,P*2,......,P*(P^(k-1)-1)}共P^(k-1) – 1个。

    所以φ(n) = p^k – 1 – (P^(k-1) – 1) = P^k – P(k-1)。

    比如P = 7,k=2,与7^2 = 49 互质的有7*1、7*2、7*3、7*4、7*5、7*(7^1-1)这六个,即7(2-1) – 1个,所以φ(49) = 48 – 6 = 42个。

    ②假设q、p是互质的两个正整数,则q*p的欧拉函数是φ(q*p) = φ(q)*φ(p),gcd(q,p) = 1。

    证明:

      令n = q*p,gcd(q,p) = 1。根据孙子定理,Zn和ZqXZp之间存在一一映射,所以n的完全余数集合的元素个数等于ZqXZp集合元素的个数。

    所以有φ(n) = φ(q)*φ(p)。

    由于任意一个数都可以质因数分解,比如 1400 = 2^3*5*2*7。

    所以任意一个数n =(X1^h1)*(X2^h2)*(X3^h3)···(Xn^hn)。

    由此的φ(n) = (X1^h1-X1(h1-1))*(X2^h2-X2^(h2-1))*(X3^h3-X3^(h3-1))···(Xn^hn-Xn^(hn-1))

           = X1^h1*X2^h2*X3^h3···Xn^hn*(1-1/X1)*(1-1/X2)*(1-1/X3)···(1-1/xn)

           =n*(1-1/X1)*(1-1/x2)*(1-1/X3)···(1-1/Xn)

    既得出结论:

    下面是我写代码:

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <math.h>
     4 using namespace std;
     5 
     6 int euler(int n){
     7     int res = n, a = n;
     8     for(int i = 2; i <= sqrt(a); i ++){
     9         if(a%i==0){
    10             res = res/i*(i-1);
    11             while(a%i==0)a/=i;
    12         }
    13     }
    14     if(a > 1) res=res/a*(a-1);
    15     return res;
    16 }
    17 int main(){
    18     int n;
    19     cin>>n;
    20     cout << euler(n) << endl;
    21     return 0;
    22 }
  • 相关阅读:
    httpmodule httphandler
    多线程基础
    LiveRTMP之rtmp流flash播放器无法正常播放问题解决(二)
    LiveRTMP CPU占用问题调优(一)
    LiveRTMP之MP4文件进行rtmp点播直播推送(三)
    LiveRTMP推送RTSP视频源进行RTMP直播
    LiveRTMP Android采集AAC流进行RTMP推送
    LiveRTMP 简单高效的RTMP推送库
    mac 终端 常用命令
    Keychain保存数据封装
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/6637525.html
Copyright © 2011-2022 走看看