HDU6715 算术

莫比乌斯反演的变形。

对 \(\mu(lcm(i,j))\) 变换,易得 \(\mu(lcm(i,j)) = \mu(i)\cdot\mu(j)\cdot \mu(gcd(i,j))\) 。那么有:

\[\begin{split}
\sum_{i=1}^{n} \sum_{j=1}^{m} \mu(lcm(i,j)) &= \sum_{i=1}^{n}\mu(i) \sum_{j=1}^{m}\mu(j)\cdot \mu(gcd(i,j)) \\
&= \sum_{d=1}^{\min(n,m)}\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}\mu(id)\mu(jd)\mu(d)[gcd(i,j)=1]
\end{split}\]

由于莫比乌斯函数的性质 \(\sum_{d\ |\ n}\mu(d)=[n=1]\) ,我们有:

\[\begin{split}
\text{上式} = \sum_{d=1}^{\min(n,m)}\sum_{d_1 = 1}^{\min(n,m)/d}\sum_{i=1}^{n/dd_1}\sum_{j=1}^{m/dd_1}\mu(idd_1)\mu(jdd_1)\mu(d)\mu(d_1)
\end{split}\]

我们令 \(T = dd_1\) ,有:

\[\text{上式}=\sum_{T=1}^{\min(n,m)}\sum_{d|T}\sum_{i=1}^{n/T}\sum_{j=1}^{m/T}\mu(iT)\mu(jT)\mu(d)\mu(T/d)
\]

令 \(f(T) = \sum_{d|T} \mu(d)\mu(T/d)\) 。

令 \(g(T,N,M)=\sum_{i=1}^{N}\sum_{j=1}^{M}\mu(iT)\mu(jT)=(\sum_{i=1}^{N}\mu(iT))\cdot(\sum_{j=1}^{M}\mu(jT))\) 。

那么我们有:

\[\text{上式}=\sum_{T=1}^{\min(n,m)} f(T)\cdot g(T,n/T,m/T)
\]

\(g(T,n/T,m/T)\) 可以在 \(O(n/T+m/T)\) 的时间内计算。

时间复杂度为 \(O(n\log n)\) 。

#include<stdio.h>
#include<algorithm> using namespace std; const int maxn = 1000005; int t, n, m, tot;
int mu[maxn], check[maxn], prime[maxn];
long long ans, f[maxn]; void init()
{
mu[1] = 1; tot = 0;
for(int i = 2; i <= 1000000; i++){
if(check[i] == 0){
mu[i] = -1;
prime[++tot] = i;
}
for(int j = 1; j <= tot && prime[j] * i <= 1000000; j++){
check[i * prime[j]] = 1;
if(i % prime[j] == 0) break;
mu[i * prime[j]] = -1 * mu[i];
}
}
for(int i = 1; i <= 1000000; i++){
for(int j = 1; j * i <= 1000000; j++){
f[i * j] += mu[i] * mu[j];
}
}
}
int main()
{
init();
for(scanf("%d", &t); t--;){
scanf("%d%d", &n, &m);
ans = 0;
for(int T = 1; T <= min(n, m); T++){
if(f[T]){
long long g1 = 0, g2 = 0;
for(int i = 1; i * T <= n; i++) g1 += mu[i * T];
for(int i = 1; i * T <= m; i++) g2 += mu[i * T];
ans += f[T] * g1 * g2;
}
}
printf("%lld\n", ans);
}
return 0;
}

HDU6715 算术(莫比乌斯反演)的更多相关文章

  1. hdu1695 GCD(莫比乌斯反演)

    题意:求(1,b)区间和(1,d)区间里面gcd(x, y) = k的数的对数(1<=x<=b , 1<= y <= d). 知识点: 莫比乌斯反演/*12*/ 线性筛求莫比乌 ...

  2. BZOJ 2154: Crash的数字表格 [莫比乌斯反演]

    2154: Crash的数字表格 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 2924  Solved: 1091[Submit][Status][ ...

  3. BZOJ2301: [HAOI2011]Problem b[莫比乌斯反演 容斥原理]【学习笔记】

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 4032  Solved: 1817[Submit] ...

  4. Bzoj2154 Crash的数字表格 乘法逆元+莫比乌斯反演(TLE)

    题意:求sigma{lcm(i,j)},1<=i<=n,1<=j<=m 不妨令n<=m 首先把lcm(i,j)转成i*j/gcd(i,j) 正解不会...总之最后化出来的 ...

  5. 莫比乌斯函数筛法 & 莫比乌斯反演

    模板: int p[MAXN],pcnt=0,mu[MAXN]; bool notp[MAXN]; void shai(int n){ mu[1]=1; for(int i=2;i<=n;++i ...

  6. 【BZOJ-2440】完全平方数 容斥原理 + 线性筛莫比乌斯反演函数 + 二分判定

    2440: [中山市选2011]完全平方数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2371  Solved: 1143[Submit][Sta ...

  7. POI2007_zap 莫比乌斯反演

    题意:http://hzwer.com/4205.html 同hdu1695 #include <iostream> #include <cstring> #include & ...

  8. hdu.5212.Code(莫比乌斯反演 && 埃氏筛)

    Code Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submi ...

  9. CSU 1325 莫比乌斯反演

    题目大意: 一.有多少个有序数对(x,y)满足1<=x<=A,1<=y<=B,并且gcd(x,y)为p的一个约数: 二.有多少个有序数对(x,y)满足1<=x<=A ...

随机推荐

  1. phpstudy添加PHP

    想在phpstudy2018里面增加一个php版本,操作如下: 一.下载php-7.2.19-ts文件,解压缩,放在相应的目录下: 二.修改Apache的配置文件1.修改httpd.conf 配置,D ...

  2. P5016龙虎斗

    这道题是2018年普及组的第二题,是一个模拟题. 首先计算出双方各自的势力,然后将增援的队伍势力加上,比较此时双方势力,并且作差,最后枚举将公平兵加在哪一个兵营.看似简单的题被我20分钟就写完了,但是 ...

  3. 洛谷 P5661 公交换乘 & [NOIP2019普及组] (模拟)

    传送门 解题思路 先把所有的数据读下来. 对于地铁,答案直接加,然后把编号放入一个数组a内. 对于公交车,从前往后枚举a数组,然后找到出现最早的且符合价钱大于等于公交车的价钱,然后把这个数删除(变为0 ...

  4. tensorflow学习笔记二----------变量

    tensorflow里面的变量表示,需要使用特定的语法进行.如果想构造一个行(列)向量,需要调用Variable函数进行.对两个变量进行操作,也要调用相应的函数. import tensorflow ...

  5. 理解 OutOfMemoryError 异常

    OutOfMemoryError 异常应该可以算得上是一个非常棘手的问题.JAVA 的程序员不用像苦逼的 C 语言程序员手动地管理内存,JVM 帮助他们分配内存,释放内存.但是当遇到内存相关的问题,就 ...

  6. vue项目1-pizza点餐系统6-路由精讲之复用router-view

    1.在主组件展示二级路由的组件内容,在App.vue中添加 <br> <div class="container"> <!-- row 行排列 --& ...

  7. scrollIntoView 与平滑滚动

    经常有这样的需求:点击一个链接(内链)跳转到当前页面中间某个部分.对于这样的需求,很容易想到使用锚点实现.但有一个问题:滚动一步到位,太生硬了. 我还是比较喜欢平滑滚动.HTML5 中提供了 CSS ...

  8. express 设置跨域

    app.use(function (req, res, next) {     res.header('Access-Control-Allow-Origin', 'http://localhost: ...

  9. bzoj5090 [Lydsy1711月赛]组题 分数规划

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=5090 题解 令 \(s_i\) 表示 \(a_i\) 的前缀和. 那么平均难度系数就是 \[ ...

  10. 线段树维护区间前k小

    线段树维护区间前k小 $ solution: $ 觉得超级钢琴太麻烦?在这里线段树提供一条龙服务 . 咳咳,开始讲正题!这道题我们有一个和超级钢琴复杂度一样 $ ~O(~\sum x\times lo ...