zoukankan      html  css  js  c++  java
  • 如何求欧拉函数?

    欧拉函数的表示含义:

    表示求小于n的正整数中与n互质的数的个数。

    欧拉函数的求法:

    性质:

    (1) n为素数,则φ(n) = n - 1

    显然,由于n为素数,1~n-1与n都只有公因子1,因此φ(n) = n - 1。

    (2) n = p^kp为素数(即n为单个素数的整数幂),则φ(n) = (p-1)*p^(k-1)

    因为n是p的整数幂,因此所有p的倍数和n都不互质。小于n的p的倍数一共有p^(k-1)-1个,因此和n互质的个数为:

    p^k-1- (p^(k-1)-1) = p^k - p^(k-1) = (p-1)*p^(k-1)

    (3)pq互质,则φ(p*q)= φ(p) * φ(q)
    例如:φ(55)=φ(11*5)= φ(11) * φ(5)=(11-1)*(5-1)=40
    由以上性质,可以推出以下定理:

    (1) pn的约数,则φ(n*p) = φ(n) * p

    p为n的约数,且p为质数。则我们可以将n表示为p^k*m。m表示其他和p不同的质数的乘积。

    显然有p^k与m互质,则:

    φ(n)
    = φ(p^k)*φ(m) = (p-1)*p^(k-1)*φ(m)
    φ(n*p)
    = φ(p^(k+1))*φ(m) = (p-1)*p^k*φ(m) = (p-1)*p^(k-1)*φ(m) * p = 
    φ(n) * p

    (2) p为不为n的约数,则φ(n*p) = φ(n) * (p-1)

    p不为n的约数,因此p与n互质,所以φ(n*p) = φ(n) * φ(p) = φ(n)*(p-1)

    
    
    有了这些定理,就可以用Eular筛法求出欧拉函数了。
    因为每个素数都可以直接计算,每个合数都会被筛掉,所以每个数都会计算到。

    本文来自博客园,作者:Jaoany,转载请注明原文链接:https://www.cnblogs.com/fanglijiao/p/15071098.html

  • 相关阅读:
    建造者模式的使用场景
    由于losf引起的pxc启动报错处理
    mysql5.6源码自动安装脚本
    mysql5.7.16二进制安装
    Maven入门
    数据链路层
    图-拓扑排序
    线性表-队列
    线性表-链表
    Java基本概念(未完)
  • 原文地址:https://www.cnblogs.com/fanglijiao/p/15071098.html
Copyright © 2011-2022 走看看