求 $\sum_{i=1}^{n}\sum_{j=1}^{m}lcm(i,j)\mu(gcd(i,j))^2$
 
$\Rightarrow \sum_{d=1}^{n}\mu(d)^2\sum_{i=1}^{n}\sum_{j=1}^{m}\frac{ij}{d}[gcd(i,j)==d]$
 
$\Rightarrow \sum_{d=1}^{n}\mu(d)^2\frac{1}{d}\sum_{i=1}^{n}\sum_{j=1}^{m}ij[gcd(i,j)==d]$
 
$\Rightarrow\sum_{d=1}^{n}\mu(d)^2d\sum_{i=1}^{\left \lfloor \frac{n}{d} \right \rfloor}\sum_{j=1}^{\left \lfloor \frac{m}{d} \right \rfloor}ij[gcd(i,j)==1]$
 
省略一些反演的套路.....
 
$\Rightarrow \sum_{d=1}^{n}\mu(d)^2d\sum_{b=1}^{\left \lfloor \frac{n}{d} \right \rfloor}\mu(b)b^2\sum_{i=1}^{\left \lfloor \frac{n}{db} \right \rfloor}i\sum_{j=1}^{\left \lfloor \frac{m}{d} \right \rfloor}j$
 
令 $Sum(n,m)=\frac{n(n+1)}{2}\times\frac{m(m+1)}{2}$
 
原式 $= \sum_{d=1}^{n}\mu(d)^2d\sum_{b=1}^{\left \lfloor \frac{n}{d} \right \rfloor}\mu(b)b^2Sum(\left \lfloor \frac{n}{db} \right \rfloor,\left \lfloor \frac{m}{db} \right \rfloor)$ 
 
令 $D=db$
 
$\Rightarrow\sum_{D=1}^{n}Sum(\left \lfloor \frac{n}{D} \right \rfloor,\left \lfloor \frac{m}{D} \right \rfloor)\sum_{d|D}\mu(d)^2d\times\mu(\frac{D}{d})\times(\frac{D}{d})^2$
 
令 $h(D)=\sum_{d|D}\mu(d)^2d\times\mu(\frac{D}{d})\times(\frac{D}{d})^2$
 
上式 $=\sum_{D=1}^{n}Sum(\left \lfloor \frac{n}{D} \right \rfloor,\left \lfloor \frac{m}{D} \right \rfloor)\times h(D)$
 
如果能知道 $h(D)$ 的前缀和,就可以用 $\sqrt n$ 的时间复杂度完成每一个询问
 
求 $h(D)$ 有两种方式,第一种是暴力枚举因数,直接更新,时间复杂度是正确的.
另一种方式是线筛 $h$ 函数,因为我们发现这个是积性的.
这里讲一下线性筛的做法(题解里写的是第一种)
 
(1) $D$ 为质数,$h(D)=D-D^2$
 
(2) $i,p$ 互质,那么 $h(i\times p)=h(i)\times h(p)$
 
(3) $i\%p==0$
 
先列出 $h(i)=\sum_{d|i}\mu(d)^2d\times\mu(\frac{i}{d})\times(\frac{i}{d})^2$
 
令 $t=\frac{i}{p}$
 
(1)若 $t$ 中也含有 $p$ 这个因子,$i\times p$ 中 $p$ 的次幂至少为 $3$,无论如何 $h(i)$ 都是 $0$
 
(2)若 $t$ 中没有 $p$ 这个因子,考虑 $\sum_{d|t}\mu(d)^2d\times\mu(\frac{i}{d})\times(\frac{i}{d})^2$ 这个式子 在乘一个 $p$ 会导致这个式子变成原来的 $-p^2$ 倍 .
再考虑 $i$ 中至少有一个 $p$ 对 $h(i\times p)$ 的贡献:我们发现无论如何 $d$ 中至少会有 $2$ 个 $p$ 的因子,所有贡献为 $0$ . 这个情况下 $h(i\times p)=-h(t)\times p^3$ 
#include<bits/stdc++.h>
#define maxn 4020002
#define ll long long
#define M 4000001
using namespace std;
#define O2 __attribute__((optimize("-O2")))
char *p1,*p2,buf[100000];
#define nc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)
int rd() {int x=0; char c=nc(); while(c<48) c=nc(); while(c>47) x=(((x<<2)+x)<<1)+(c^48),c=nc(); return x;}
void setIO(string s)
{
string in=s+".in";
string out=s+".out";
freopen(in.c_str(),"r",stdin);
freopen(out.c_str(),"w",stdout);
}
int cnt;
bool vis[maxn];
int prime[maxn], mu[maxn];
ll g[maxn],mod=1,sum[maxn];
O2 inline void Init()
{
int i,j;
mu[1]=1;
for(i=1;i<=30;++i) mod=mod*2;
for(i=2;i<=M;++i)
{
if(!vis[i]) prime[++cnt]=i, mu[i]=-1;
for(j=1;j<=cnt&&1ll*prime[j]*i<=M;++j)
{
vis[prime[j]*i]=1;
if(i%prime[j]==0)
{
mu[i*prime[j]]=0;
break;
}
mu[i*prime[j]]=-mu[i];
}
}
for(i=1;i<=M;++i)
for(j=1;1ll*i*j<=M;++j)
if(mu[j]) g[i*j]+=mu[i]*i, g[i*j]%mod;
for(i=1;i<=M;++i) g[i]=(1ll*g[i]*i+g[i-1]+mod)%mod;
for(i=1;i<=M;++i) sum[i]=(1ll*(i+1)*i/2)%mod;
}
O2 int main()
{
// setIO("input");
Init();
int T,n,m;
T=rd();
while(T--)
{
n=rd(), m=rd();
if(n>m) swap(n,m);
int i,j;
ll re=0;
for(i=1;i<=n;i=j+1)
{
j=min(n/(n/i), m/(m/i));
re=(re + (1ll*sum[n/i]*sum[m/i]*(g[j]-g[i-1])%mod)%mod + mod)%mod;
}
printf("%lld\n",re);
}
return 0;
}

  

BZOJ 2694: Lcm 莫比乌斯反演 + 积性函数 + 线性筛 + 卡常的更多相关文章

  1. BZOJ 2693: jzptab 莫比乌斯反演 + 积性函数 +筛法

    Code: #include<bits/stdc++.h> #define ll long long #define M 10001000 #define maxn 10200100 #d ...

  2. bzoj2693--莫比乌斯反演+积性函数线性筛

    推导: 设d=gcd(i,j) 利用莫比乌斯函数的性质 令sum(x,y)=(x*(x+1)/2)*(y*(y+1)/2) 令T=d*t 设f(T)= T可以分块.又由于μ是积性函数,积性函数的约束和 ...

  3. 积性函数&线性筛&欧拉函数&莫比乌斯函数&因数个数&约数个数和

    只会搬运YL巨巨的博客 积性函数 定义 积性函数:对于任意互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数. 完全积性函数:对于任意整数a和b有性质f(ab)=f(a)f(b)的数论函数 ...

  4. [模板] 积性函数 && 线性筛

    积性函数 数论函数指的是定义在正整数集上的实或复函数. 积性函数指的是当 \((a,b)=1\) 时, 满足 \(f(a*b)=f(a)*f(b)\) 的数论函数. 完全积性函数指的是在任何情况下, ...

  5. BZOJ4804 欧拉心算(莫比乌斯反演+欧拉函数+线性筛)

    一通套路后得Σφ(d)μ(D/d)⌊n/D⌋2.显然整除分块,问题在于怎么快速计算φ和μ的狄利克雷卷积.积性函数的卷积还是积性函数,那么线性筛即可.因为μ(pc)=0 (c>=2),所以f(pc ...

  6. [bzoj] 2694 Lcm || 莫比乌斯反演

    原题 定义整数a,b,求所有满足条件的lcm(a,b)的和: 1<=a<=A 1<=b<=B ∀n>1,n2†gcd(a,b)(即任意n>1,\(n^2\)不是gc ...

  7. BZOJ 2694: Lcm [莫比乌斯反演 线性筛]

    题意:求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m lcm(i,j)\ : gcd(i,j) 是sf 无平方因子数\) 无平方因子数?搞一个\(\mu(gcd( ...

  8. Bzoj 2818: Gcd 莫比乌斯,分块,欧拉函数,线性筛

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 3241  Solved: 1437[Submit][Status][Discuss ...

  9. $BZOJ$2818 $gcd$ 莫比乌斯反演/欧拉函数

    正解:莫比乌斯反演/欧拉函数 解题报告: 传送门$QwQ$ 一步非常显然的变形,原式=$\sum_{d=1,d\in prim}^{n}\sum_{i=1}^{n}\sum_{j=1}^{n}[gcd ...

随机推荐

  1. P1970花匠

    传送 首先,这道题据说是一个dp 其次,贪心就能做 我们先来看好想好写的贪心 按照题目来,所有偶数点要么都是凸的,要么都是凹的,不能有凸有凹.我们把每株花的高度都在平面直角坐标系中点出来,再连线.这样 ...

  2. ceph-性能调优

    Ceph 参数性能调优https://blog.csdn.net/changtao381/article/details/49907115这篇文章对我的环境有较大帮助 ceph优化记录 ceph.co ...

  3. mysql一主多从配置详情

    https://www.cnblogs.com/zgx/archive/2011/09/13/2174823.html 1.准备好3台虚机,一台master,两台slave且都安装好mysql 2.主 ...

  4. NaN、null、undefined的那些事

    一.NaN , NaN, 'abc', false] let newArray = JSON.parse(JSON.stringify(arr)) // [1, null, 'abc', false] ...

  5. javascript获取select 的id与值

    javascript获取select 的id与值 <script type="text/javascript"> function showOptionId () { ...

  6. 【Unity知识点】安卓游戏如何在切后台后继续运行

    解决方法很简单,在android项目AndroidManifest.xml文件中的activity中添加如下内容: android:configChanges="fontScale|keyb ...

  7. 剑指offer第二版面试题5:从尾到头打印链表(JAVA版)

    题目描述: 输入一个链表,从尾到头打印链表每个节点的值.返回新链表. import java.util.Stack; //定义链表结构 class ListNode { int value; List ...

  8. HUD-2112 HDU Today(最短路map标记)

    题目链接:HUD-2112 HDU Today 思路: 1.最短路spfa模板. 2.map标记建图. 3.考虑距离为0或者-1的情况. 总结:下次map记得清空orz. AC代码: #include ...

  9. JAVA中JavaBean对象之间属性拷贝的方法

    JAVA中JavaBean对象之间的拷贝通常是用get/set方法,但如果你有两个属性相同的JavaBean或有大部分属性相同的JavaBean,对于这种情况,可以采用以下几个简便方法处理. 下面对这 ...

  10. 巧用css内容生成

    1.      .box:before{content:"生成内容";}在.box内部的内容之前加上生成内容 2.       .box:after{content:"生 ...