容斥原理、欧拉函数、phi
2015-06-15 21:00
218 查看
容斥原理:
直接摘用百度词条:
也可表示为
设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(1) = 1; PHI(2) = 1; PHI(3) = 2; PHI(4) = 2; ... PHI(9) = 6; ...
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函数值的方法(方法与筛法求素数非常类似)
然而我并没有弄懂其原理= =
直接摘用百度词条:
也可表示为
设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); } } }
然而我并没有弄懂其原理= =
相关文章推荐
- 关于fclose报错问题
- cocos2dx学习笔记:CCArray-removeObjectAtIndex
- 三层B/S结构
- 魔方阵
- 记录开始
- MaterialImageLoading
- LNMP+Zabbix一键安装脚本
- 黑马程序员——Java基础---多态,内部内和包的概述
- Struts2 action的单例与多例
- <jsp:useBean class="" >
- 专访《Javascript设计模式与开发实践》作者曾探:爱编程 爱生活
- Android程序如何读取手机联系人
- hdu 1009 整理下水题 贪心
- 怎么面试架构师
- C#高级编程十五天----只读字段
- MaterialViewPager
- Java面向对象 继承的应用-工程版本迭代
- 黑马程序员——Java基础---继承和抽象
- java 设计模式
- HDU2181---哈密顿绕行世界问题