莫比乌斯函数打表
来源:互联网 发布:企业级 选课系统 源码 编辑:程序博客网 时间:2024/05/17 21:39
莫比乌斯反演推荐博客:
莫比乌斯详解,莫比乌斯应用
莫比乌斯函数是莫比乌斯反演的核心
莫比乌斯函数打表
第一种
void getMu(){ //n*logn 递推筛法 for(int i=1; i<=MAXN; i++) { int target = i==1?1:0; int delta = target - mu[i]; mu[i]=delta; for(int j=i*2; j<=MAXN; j+=i) mu[j]+=delta; } }第二种
//线性筛法求莫比乌斯函数 bool check[MAXN+10]; int prime[MAXN+10]; int mu[MAXN+10]; void Moblus() { memset(check,false,sizeof(check)); mu[1] = 1; int tot = 0; for(int i = 2; i <= MAXN; i++) { if( !check[i] ){ prime[tot++] = i; mu[i] = -1; } for(int j = 0; j < tot; j++) { if(i * prime[j] > MAXN) break; check[i * prime[j]] = true; if( i % prime[j] == 0){ mu[i * prime[j]] = 0; break; }else{ mu[i * prime[j]] = -mu[i]; } } } }
const int maxn = 10000010;int prime[maxn],mu[maxn],sum[maxn];bool check[maxn];void Mobius(){ memset(check,false,sizeof(check)); mu[1] = 1; prime[0] = 0; for(int i=2;i<maxn;i++){ if(!check[i]){ mu[i] = -1; sum[i] = 1; prime[++prime[0]] = i; } for(int j=1;j<=prime[0];j++){ if(i*prime[j] >= maxn) break; check[i*prime[j]] = true; if(i % prime[j]){ mu[i*prime[j]] = -mu[i]; sum[i*prime[j]] = mu[i] - sum[i]; } else{ mu[i*prime[j]] = 0; sum[i*prime[j]] = mu[i]; break; } } }}
阅读全文
0 0
- 莫比乌斯函数打表
- 莫比乌斯函数
- 莫比乌斯函数
- 莫比乌斯函数
- 莫比乌斯函数
- 莫比乌斯函数
- 莫比乌斯函数
- BZOJ1101【莫比乌斯函数】
- BZOJ2301【莫比乌斯函数】
- BZOJ2820【莫比乌斯函数】
- BZJO2005【莫比乌斯函数】
- 莫比乌斯函数ACM
- bzoj2301 莫比乌斯函数
- 莫比乌斯函数的证明
- bzoj3994【莫比乌斯函数】
- 莫比乌斯反演函数
- 51nod_1240 莫比乌斯函数
- 51nod_1240 莫比乌斯函数
- android分层动画
- 【位图】位图实现,处理大数据
- Ubuntu系统安装nginx服务器
- Linux下实现定时器Timer的几种方法
- [编程题] 分苹果
- 莫比乌斯函数打表
- PLSQL:集合类型作为表列
- stm32 printf重定向
- 线段树模板 poj3468
- Js文件中文乱码问题
- js多层for循环嵌套如何一层一层终止
- 使用MySQL Workbench进行数据库设计——修改MySQL Schema的名称
- [转自用]ASCII码对应表(chr)
- C/C++中const关键字