数论 莫比乌斯反演
来源:互联网 发布:手机usb共享网络给电脑 编辑:程序博客网 时间:2024/04/29 13:03
原创:http://blog.csdn.net/acdreamers/article/details/8542292
莫比乌斯反演在数论中占有重要的地位,许多情况下能大大简化运算。那么我们先来认识莫比乌斯反演公式。
定理:和是定义在非负整数集合上的两个函数,并且满足条件,那么我们得到结论
在上面的公式中有一个莫比乌斯函数,它的定义如下:
(1)若,那么
(2)若,均为互异素数,那么
(3)其它情况下
或者:
1)莫比乌斯函数μ(n)的定义域是N
2)μ(1)=1
3)当n存在平方因子时,μ(n)=0;(则 n = 4, 8, 9, 12等时,μ(n)=0);
4)当n是素数或奇数个不同素数之积时,μ(n)=-1 ; (例如2, 3, 30=2*3*5;μ(2)=μ(3)=μ(30)=0)
5)当n是偶数个不同素数之积时,μ(n)=1;(例如6=2*3;μ(6)=1);
对于函数,它有如下的常见性质:
(1)对任意正整数有
(2)对任意正整数有
线性筛选求莫比乌斯函数μ(n)代码。
#include<stdio.h>#include<string.h>const int N=100;int vis[N+1];int mu[N+1];int prime[N+1];void Init(){ memset(vis,0,sizeof(vis)); mu[1] = 1; int cnt = 0; for(int i=2; i<N; i++) { if(!vis[i]) { prime[cnt++] = i; mu[i] = -1;//素数的莫比乌斯函数值为-1 } for(int j=0; j<cnt && i*prime[j]<N; j++) { vis[i*prime[j]] = 1; if(i%prime[j]) mu[i*prime[j]] = -mu[i]; else { mu[i*prime[j]] = 0; break; } } }}int main(){int i;Init();for(i=1;i<100;i++){printf("%d ",mu[i]);if(i%10==0){printf("\n");}}return 0;}
有了上面的知识,现在我们来证明莫比乌斯反演定理。
证明
证明完毕!
我们知道莫比乌斯反演的一般描述为:
其实它还有另一种描述,本题也是用到这种。那就是:
0 0
- 数论 莫比乌斯反演
- 【数论】(莫比乌斯反演)关于莫比乌斯反演的小结
- HDU1695 GCD 数论之 莫比乌斯反演
- [hdu 5072]Coprime 数论-莫比乌斯反演
- Hdoj 5212 Code 【数论】【莫比乌斯 反演】
- BZOJ 4176 Lucas的数论 莫比乌斯反演
- bzoj3994 约数个数和 数论&莫比乌斯反演
- 【莫比乌斯反演】【数论】[ZBOJ 2693]jzptab
- BZOJ_P2820 YY的GCD(数论+莫比乌斯反演)
- 约数个数和(数论,莫比乌斯反演)BZOJ3994
- BZOJ_P2671 Calc(数论+莫比乌斯反演)
- 【BZOJ2301】problem b,数论之莫比乌斯反演
- 【BZOJ3601】一个人的数论,莫比乌斯反演+高斯消元
- bzoj 4176 Lucas的数论 莫比乌斯反演
- bzoj3601 一个人的数论 莫比乌斯反演+高斯消元
- codeforces839D Winter is here 数论,莫比乌斯反演
- 莫比乌斯反演公式(数论)
- [数论][莫比乌斯反演] BZOJ 4816: 数字表格
- Object-c基础编程学习笔记-源文件组织,XCODE新功能
- Node.js 博客实例(十三)增加404页面
- VC工程垃圾清理小工具(.bat)
- WAP面试题——BFS解法
- 海康网络SDK概要分析
- 数论 莫比乌斯反演
- Python学习之函数
- 反转链表
- 解决tfs连接非常慢方法
- 李嘉诚学英语的故事
- 简明vim练级攻略(陈皓)
- Qt实例分析——C++定义的类创建为供QML使用的插件
- VS2012静态链接lua
- HDFS QUOTAS(hdfs配额)