莫比乌斯反演
2016-04-19 17:27
246 查看
定理:F(n)和f(n)是定义在非负整数集合上的两个函数,并且满足条件F(n)=∑d|nf(d)F(n)=\sum_{d|n}f(d),那么我们得到结论f(n)=∑d|nμ(d)F(n/d)f(n)=\sum_{d|n}\mu(d)F(n/d)。
在上面的公式中有一个函数μ(d)\mu(d),它的定义如下:
(1)若d=1,那么μ(d)=1\mu(d)=1.
(2)若d=p1p2⋯pkp1p2\cdots pk,均为互异素数,那么μ(d)=(−1)k\mu(d)=(-1)^k.
(3)其它情况下μ(d)=0\mu(d)=0.
对于函数μ(d)\mu(d),它有如下的常见性质:
对任意正整数n有
![](http://img.blog.csdn.net/20140416161656796)
对任意正整数n有
![](http://img.blog.csdn.net/20140416162025500)
在上面的公式中有一个函数μ(d)\mu(d),它的定义如下:
(1)若d=1,那么μ(d)=1\mu(d)=1.
(2)若d=p1p2⋯pkp1p2\cdots pk,均为互异素数,那么μ(d)=(−1)k\mu(d)=(-1)^k.
(3)其它情况下μ(d)=0\mu(d)=0.
对于函数μ(d)\mu(d),它有如下的常见性质:
对任意正整数n有
对任意正整数n有
//求1-n的函数值 bool vis[MAX+10]; int mu[MAX+10],prime[MAX+10],cnt; void mobi(int n){ memset(vis,false,sizeof(vis)); mu[1]=1; cnt=0; for(int i=2;i<=n;++i){ if(!vis[i]){ prime[cnt++]=i; mu[i]=-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 mobi(int n){ int m=1; for(int i=2;i*i<=n;++i) if(n%i==0){ m*=-1; int k=0; do{ k++; if(k>1){ m=0; break; } n/=i; }while(n%i==0); } if(n>1) m*=-1; return m; }
相关文章推荐
- Error configuring application listener of class org.springframework.web.context.ContextLoaderListene
- DIALOG
- 一些CA要点
- ORACLE常用SQL优化hint语句
- volatile底层实现
- 信号量(sem)
- 编译AOSP方便阅读源码
- stm32 Flash操作
- shell判断文件是否存在
- Innobackup mysql 多实例环境搭建主从同步
- GSL-VS
- Android AlertDialog实现分享对话框/退出对话框/下载对话框
- Java中的CopyOnWrite容器
- Visual Studio中使用正则表达式快速统计项目总共代码行数
- update select 语句和merge into语句
- linux grep命令详解
- SUID、SGID详解
- 动态规划之n个元素出栈顺序种数
- 本宝宝的VIM_Pulgin
- DNS 查找失败,因此找不到 ******* 的服务器