首先,你要知道什么是莫比乌斯函数

然后,你要知道什么是积性函数

最后,你最好知道什么是线性筛

莫比乌斯反演

积性函数

线性筛,见上一篇

知道了,就可以愉快的写mobius函数了

由定义:

μ(n)=   1          (n=1)

(-1)^k   (n=p1p2...pk)  /*  注意质因子次数为1因为次数大于等于2则含有平方因子  */

0          (其他)

为什么关系平方因子呢?

因为,由定义:

/*
莫比乌斯函数完整定义的通俗表达:
1)莫比乌斯函数μ(n)的定义域是N
2)μ(1)=1
3)当n存在平方因子时,μ(n)=0
4)当n是素数,μ(n)=-1
5)当n是奇数个不同素数之积时,μ(n)=-1
6)当n是偶数个不同素数之积时,μ(n)=1
*/

Hint

由μ函数本身的积性

所以对于其他情况,只需要O(1)的从  mu[i] -> mu[i*p[j]] 就可以了

mu[i*p[j]]=-mu[i];

综上所述:

const int maxn=+;
int mu[maxn],p[maxn],flag[maxn],cnt;
void mobius(int n){
mu[]=;
for(int i=;i<=n;i++){
if(!flag[i])p[++cnt]=i,mu[i]=-;
for(int j=;j<=cnt && i*p[j]<=n;j++){
flag[i*p[j]]=;
if(i%p[j]==){mu[i*p[j]]=;break;}
mu[i*p[j]]=-mu[i];
}
}
}

mobius

最新文章

  1. Tomcat7安装配置 for Ubuntu
  2. PHP脱mysql脚本
  3. Android 系统ID介绍
  4. 学习面试题Day05
  5. linux 内核驱动--Platform Device和Platform_driver注册过程
  6. Java实战之01Struts2-03属性封装、类型转换、数据验证
  7. 关于Android NDK
  8. MVC 5 第二章 项目结构
  9. 关于Android中为什么主线程不会因为Looper.loop()里的死循环卡死?引发的思考,事实可能不是一个 epoll 那么 简单。
  10. SpringBoot实践 - SpringBoot+MySql+Redis
  11. MySQL 是如何解决幻读的
  12. mysql创建table
  13. Emacs 中使用中文插件 eim
  14. 如何用java语言实现C#中的ref关键字(按引用传递参数)的效果
  15. python 中range函数的用法
  16. jenkin 不必要的Execute shell执行失败,导致jenkins都失败的解决
  17. java socket输入输出中文乱码问题
  18. HMACSHA1算法的JAVA实现
  19. Id_Name
  20. Scala和Java二种方式实战Spark Streaming开发

热门文章

  1. jQuery---tab栏切换
  2. JavaScript权威指南第6版
  3. 题解 AT4170 【[ABC103A] Task Scheduling Problem】
  4. QT版本
  5. 找不到getter/setter——没有安装lombok插件
  6. CodeForces -1216B.Shooting
  7. 【网站】 简单通用微信QQ跳转浏览器打开代码
  8. 完整安装IIS服务
  9. 用html5自带表单验证 并且用ajax提交的解决方法(附例子)
  10. python使用libnum,gmpy2快速解RSA