莫比乌斯反演0
时间:2022-05-08
本文章向大家介绍莫比乌斯反演0,主要内容包括弃坑、莫比乌斯函数、性质、莫比乌斯反演、证明、莫比乌斯函数的计算方法、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
弃坑
莫比乌斯函数
定义
设函数mu(n)为莫比乌斯函数
mu =begin{cases}left( -1right) ^{k}left( n=p_{1}p_{2}ldots p_{k}right) \ Oleft( exists P^{2}|nright) \ 1left( n=1right) end{cases}
性质
- mu(n)为积性函数
- sum _{d|n}mu left( dright) =left[ n=1right](非常重要!!)
莫比乌斯反演
公式
如果
gleft( nright) =sum _{d|n }fleft( dright)
那么
fleft( nright) =sum _{d|n}mu left( dright) gleft( dfrac {n}{d}right)
证明
sum _{d|n}mu left( dright) gleft( dfrac {n}{d}right)
=sum _{d|n}mu left( dfrac {n}{d}right) gleft( dright)
=sum _{d|n}mu left( dfrac {n}{d}right) sum _{k|d}fleft( kright)
=sum _{k|n}sum_{d|{dfrac{n}{k}}}mu(d)f(k)
=sum _{k|n}[dfrac{n}{k}=1]f(k)
=f(n)
莫比乌斯函数的计算方法
因为mu(n)为积性函数
那么可以利用线性筛来计算
#include<cstdio>
#include<cstring>
const int MAXN=1e6+10;
int prime[MAXN],mu[MAXN],vis[MAXN],tot,n;
void Euler()
{
vis[1]=1;mu[1]=1;
for(int i=2;i<=n;i++)
{
if(!vis[i]) prime[++tot]=i,mu[i]=-1;//只有一个质因子
for(int j=1;i*prime[j]<=n&&j<=tot;j++)
{
vis[ i*prime[j] ]=1;
if(i%prime[j]==0)//i中包含prime[j]
{
mu[ i*prime[j] ]=0;//乘起来之后肯定包含prime[j]^2
break;
}
else mu[ i*prime[j] ]=-mu[i];//多了一个质因子
}
}
}
int main()
{
printf("Please input number:n");
scanf("%d",&n);
Euler();
printf("%d",mu[n]);
return 0;
}
- python接口自动化12-案例分析(csrfToken)
- Python基础学习笔记
- POJ 3278 Catch That Cow(BFS,板子题)
- 【请您听我说】PHP语法特点的一些看法
- 喵哈哈村的魔法考试 Round #1 (Div.2) 题解&源码(A.水+暴力,B.dp+栈)
- 查找第k小的元素(O(n)递归解法)
- C/C++对bool operator < (const p &a)const的认识,运算符重载详解(杂谈)
- C/C++中substr函数的应用(简单讲解)
- C++ STL学习之容器set和multiset (补充材料)
- Codeforces Round #410 (Div. 2)(A,字符串,水坑,B,暴力枚举,C,思维题,D,区间贪心)
- 关于int *a[常量]与int (*a)[常量]的分析与区分(详解)
- python笔记3-发送邮件(smtplib)
- 关关的刷题日记01—Leetcode 169. Majority Element
- 关小刷刷题02——Leetcode 169. Majority Element 方法2和3
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【深入理解java集合系列】HashMap实现原理
- 【深入理解java集合系列】HashSet实现原理
- 【深入理解java集合系列】LinkedHashSet实现原理
- 突击并发编程JUC系列-原子引用AtomicReference
- JVM类加载过程科普
- 程序员自我修养之 Git 提交信息和分支创建规范
- Django使用redis作为缓存系统
- 一天一大 leet(两个数组的交集 II)难度:简单-Day20200713
- 2020年研一末找实习总结(面经)
- 一天一大 leet(三角形最小路径和)难度:中等-Day20200714
- 一天一大 leet(判断二分图)难度:中等-Day20200716
- 一天一大 lee(被围绕的区域)难度:中等-Day20200811
- 一天一大 leet(搜索插入位置)难度:简单-Day20200717
- 一天一大 leet(两数之和 II - 输入有序数组)难度:简单-Day20200720
- 一天一大 leet(分割数组的最大值)难度:困难-Day20200725