莫比乌斯反演及其应用-小结
来源:互联网 发布:如何申请农村淘宝 编辑:程序博客网 时间:2024/06/05 07:05
莫比乌斯反演的形式:
另一种描述是:
一种是和所有的约数有关一种是和所有的倍数有关
关于莫比乌斯函数mu,他的定义如下:
这个莫比乌斯函数有一些性质:
(1)
(2)
-----------------------分块优化----------------------
如果最后反演得到的f(x)大致为
f(x)=sigma( n/i * m/i *xxxx )
则可以分块优化把复杂度降到sqrt(n)
范例代码:
//找[1,n],[1,m]内互质的数的对数,分块优化ll solve(ll n,ll m ){ if (n>m)swap(n,m); ll ret=0; for (int i=1,last;i<=n;i=last+1) { last=min(n/(n/i),m/(m/i)); ret+=(sum[last]-sum[i-1])*(n/i)*(m/i); } return ret;}其中sum为mu的前缀和
莫比乌斯函数 线性筛代码:o(n)
const int N=50000;bool is_prime[N+500];int prime[N+50];int mu[N+50];ll sum[N+50];ll tot;void Moblus(){ tot = 0; mu[1] = 1; for(ll i = 2; i < N; i++) { if(!is_prime[i]) { prime[tot++] = i; mu[i] = -1; } for(ll j = 0; j < tot && i*prime[j] < N; j++) { is_prime[i*prime[j]] = 1; if(i % prime[j]) { mu[i*prime[j]] = -mu[i]; } else { mu[i*prime[j]] = 0; break; } } }}
nlogn 筛法 (因子倍增法):
void pre() // nlogn+n+nlogn{ for (int i=1; i<=N; i++) for (ll j=i ; j<=N; j+=i) ud[j].x+=i; }
预处理:
通常求这部分的时候,由于我们是枚举D,不可能在枚举某个d时去找所有约数求值,
往往 是先预处理,遍历所有的i=1:n,利用因子倍增法预处理出所有的F(i)*u(d/i)。
0 0
- 莫比乌斯反演及其应用-小结
- 莫比乌斯反演小结
- 莫比乌斯反演小结
- 莫比乌斯反演小结
- 莫比乌斯反演学习小结
- 【数论】(莫比乌斯反演)关于莫比乌斯反演的小结
- 莫比乌斯反演知识点及其理解
- 二项式反演,莫比乌斯反演。
- HDU 4746 Mophues (莫比乌斯反演应用)
- bzoj 2440 莫比乌斯反演应用
- rqnoj 607 莫比乌斯反演应用
- HDU 4746 Mophues (莫比乌斯反演应用)
- 莫比乌斯反演
- 莫比乌斯反演
- 莫比乌斯反演
- 莫比乌斯反演
- 莫比乌斯反演
- 莫比乌斯反演
- ShareSDK集成
- ORA-01555
- Windows 上安装Rabbit MQ
- 设计模式之建造者模式(Builder)
- shell编程——if语句 if -z -n -f -eq -ne -lt
- 莫比乌斯反演及其应用-小结
- LIST 放List 订单、购物车数据整理
- 数据结构-树
- Spring IOC
- j2ee工程师等级划分
- JAVA设计模式之策略模式的使用分析
- Codeforces 522 A Reposts【最短路】
- 各种数据库连接URL关键代码
- 盘点Android使用自定义字体遇到的坑