zoukankan      html  css  js  c++  java
  • 2021/9/20随笔(数论与组合计数的结合,欧拉函数推导)

    前置知识:

    容斥原理(可参考https://www.cnblogs.com/komet/p/15156521.html),

    互质概念,

    基础数学。


    欧拉函数 φ(n) 定义为对正整数n,小于n的正整数中与n互质的数的数目。

    通项公式为:

     公式1

    先不考虑欧拉函数具体是什么,我们先考虑它的定义——小于n的正整数中与n互质的数的数目。给你一个这样的问题你该如何解决?

    最朴素的想法肯定是,一一判断,枚举1到n,每次枚举就判断目前枚举的数字i和n是否互质,即gcd是否为1,但这样就太慢了,算法的复杂度为O(nlogn),或者先预处理出n的质因子,判断时用是否整除判断,复杂度或许会更好些,但都还是太慢了。

    看过我博客的人就会发现,这问题明显是区间互质问题的一个子问题,用容斥原理就可以在能O(logn)内解决,准确的说应该是O(k^2)的复杂度,k为n的质因子个数。

    公式如下: 公式2

    (n为N质因子的数量,p1~pn为质因子,该公式的证明由上面给出的我上篇随笔得出,读者也可以自己独立思考该公式。)

    简单的说,该公式就是N乘质因子的所有组合的倒数的偶数和与负数的奇数和。

    如n为3时该公式为,n*(1-(1/p1+1/p2+1/p3)+(1/p1p2+1/p1p3+1/p2p3)-(1/p1p2p3))  (p 为质因子)

    这时回头看看欧拉函数,是不是很相似。

    由于上面那个公式化简起来比较麻烦,我们先来考虑一个简单的化简

    有式子1+ a+b+c+ab+ac+ad+abc

    提取公因式a

    有 a(1+b+c+bc)+1+b+c+bc

    提取公因式1+b+c+bc

    有(1+a)(1+b+c+bc)

    提取公因式b

    有 (1+b)(1+c+b(1+c))

    提取公因式1+c

    有 (1+a)(1+b)(1+c)=1+ a+b+c+ab+ac+ad+abc

    若a=-1/p1 , b=-1/p2 , c=-1/p3

    则有,(1-1/p1)(1-1/p2)(1-1/p3)=1-(1/p1+1/p2+1/p3)+(1/p1p2+1/p1p3+1/p2p3)-(1/p1p2p3)

    推广:

    同N(1-1/p1)(1-1/p2)(1-1/p3)...(1-1/pn)

  • 相关阅读:
    网络传输协议 UDP & TCP 详解
    OSI 七层协议
    (01day)python接口测试
    Python2和Python3的区别,以及为什么选Python3的原因
    JAVA反编译工具
    JAR反编译工具
    webdriver19-witchto方法
    webdriver实例14-Xpath定位的几种方法
    webdirver实例1--查找元素
    Qt插件开发
  • 原文地址:https://www.cnblogs.com/komet/p/15314267.html
Copyright © 2011-2022 走看看