zoukankan      html  css  js  c++  java
  • 容斥原理、欧拉函数、phi

    容斥原理:

      直接摘用百度词条

        

    也可表示为
    设S为有限集,
    ,则
    两个集合的容斥关系公式:A∪B = A+B - A∩B (∩:重合的部分)
    三个集合的容斥关系公式:A∪B∪C = A+B+C - A∩B - B∩C - C∩A +A∩B∩C
    详细推理如下:
    1、 等式右边改造 = {[(A+B - A∩B)+C - B∩C] - C∩A }+ A∩B∩C
    2、文氏图分块标记如右图图:1245构成A,2356构成B,4567构成C
    3、等式右边()里指的是下图的1+2+3+4+5+6六部分:
    那么A∪B∪C还缺部分7。
    4、等式右边[]号里+C(4+5+6+7)后,相当于A∪B∪C多加了4+5+6三部分,
    减去B∩C(即5+6两部分)后,还多加了部分4。
    5、等式右边{}里减去C∩A (即4+5两部分)后,A∪B∪C又多减了部分5,
    则加上A∩B∩C(即5)刚好是A∪B∪C。
     

    欧拉函数

    定义

    欧拉函数PHI(n)表示的是比n小,并且与n互质的正整数的个数(包括1)。
    比如:PHI(1) = 1; PHI(2) = 1; PHI(3) = 2; PHI(4) = 2; ... PHI(9) = 6; ...

    通式及其证明

    要计算一个正整数n的欧拉函数的方法如下:
    1. 将n表示成素数的乘积: n = p1 ^ k1 * p2 ^ k2 * ... * pn ^ kn(这里p1, p2, ..., pn是素数)
    2. PHI(n) = (p1 ^ k1 - p1 ^ (k1 - 1)) * (p2 ^ k2 - p2 ^ (k2 - 1)) * ... * (pn ^ kn - pn ^ (kn - 1))
                   =n*(p1-1)(p2-1)……(pi-1)/(p1*p2*……pi);
                      =n*(1-1/p1)*(1-1/p2)....(1-1/pn)
     
    然而在紫薯上给出了另外一种求解欧拉phi函数值的方法(方法与筛法求素数非常类似)
    void phi_table (int n,int* phi){
        for (int i=2;i<=n;i++) phi[i]=0;
        phi[i]=1;
        for (int i=2;i<=n;i++) if (!phi[i]) {
            for (int j=i;j<=n;j+=i) {
                if (!phi[j]) phi[j]=j;
                phi[j]=phi[j]/i*(i-1);
            }
        }
    }

    然而我并没有弄懂其原理= =

  • 相关阅读:
    使用node.js如何爬取网站数据
    关于@font-face的使用
    webpack通过postcss-loader添加浏览器前缀
    点击弹出 +1放大效果 -- jQuery插件
    网站CSS选择器性能讨论
    修改 上传图片按钮input-file样式。。
    insertAdjacentHTML方法示例
    css背景色半透明的最佳实践
    js实现选中文字 分享功能
    js实现滑动的弹性导航
  • 原文地址:https://www.cnblogs.com/acbingo/p/4579200.html
Copyright © 2011-2022 走看看