数表
我们首先直接根据题目列式子,对位置
我们先不考虑
,设
我们考虑
现在考虑
但是这样仍然会超时,此时我们没有别的办法化简了,除了换序(所以以后没有别的办法的时候考虑换序)
如果不换序的话,是分块套分块,复杂度退化为
这个时候要换序的话,跟微积分一样,先把所有函数写在一起,有
然后再把该提出的提出,有
令
原式可以写成
预处理出
预处理
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+10,Q=2e4+10;
const ll mod=1ll<<31;
struct node
{
int n,m,a,id;
}qry[Q];
int u[N],v[N],prime[N],cnt;
ll c[N],f[N],F[N],ans[N];
vector<int> pos[N*5];
void init(int n)
{
u[1]=1;
for(int i=2;i<=n;i++)
{
if(!v[i])
{
v[i]=i;
prime[++cnt]=i;
u[i]=-1;
}
for(int j=1;j<=cnt;j++)
{
if(prime[j]>v[i]||prime[j]>n/i) break;
v[i*prime[j]]=prime[j];
if(i%prime[j]==0||!u[i]) u[i*prime[j]]=0;
else u[i*prime[j]]=-u[i];
}
}
}
bool cmp(node i,node j)
{
return i.a>j.a;
}
void add(int x,int d)
{
for(;x<=N-10;x+=x&-x) c[x]=(c[x]+d+mod)%mod;
}
ll ask(int x)
{
ll res=0;
for(;x;x-=x&-x) res=(res+c[x])%mod;
return res;
}
int main()
{
init(N-10);
for(int d=1;d<=N-10;d++)
for(int j=d;j<=N-10;j+=d)
F[j]+=d;
for(int d=1;d<=N-10;d++)
for(int j=d;j<=N-10;j+=d)
f[j]=(F[d]*u[j/d]+f[j])%mod;//倍除法
int Max=0;
for(int i=1;i<=N-10;i++)
{
pos[F[i]].push_back(i);
Max=max(Max,(int)F[i]);
}
int q;
scanf("%d",&q);
for(int i=1;i<=q;i++)
{
scanf("%d%d%d",&qry[i].n,&qry[i].m,&qry[i].a);
qry[i].id=i;
}
sort(qry+1,qry+q+1,cmp);
for(int i=1;i<=N-10;i++)
add(i,f[i]);
for(int i=1;i<=q;i++)
{
while(Max>qry[i].a)
{
for(int j=0;j<pos[Max].size();j++)
for(int k=pos[Max][j];k<=N-10;k+=pos[Max][j])
add(k,-F[pos[Max][j]]*u[k/pos[Max][j]]);
//必须要这么清零,不能直接写成
/*
for(int j=0;j<pos[Max].size();j++)
add(pos[Max][j],-f[pos[Max][j]]);
*/
Max--;
}
for(int l=1,r;l<=min(qry[i].n,qry[i].m);l=r+1)
{
r=min(min(qry[i].n,qry[i].m),min(qry[i].n/(qry[i].n/l),qry[i].m/(qry[i].m/l)));
ans[qry[i].id]=(ans[qry[i].id]+(ask(r)-ask(l-1)+mod)%mod*(qry[i].n/l)%mod*(qry[i].m/l)%mod)%mod;//注意后面两个(qry[i].n/l)和 (qry[i].m/l)一定要打括号,这样才能整除
}
}
for(int i=1;i<=q;i++) printf("%lld\n",ans[i]);
return 0;
}
上面的式子也可以按照莫比乌斯反演来考虑。由于题目没有出现
然后还有一个提醒的点是这里最后化出来的是莫比乌斯反演的第一形式,但是是分块套分块,会导致超时,这个时候就要利用莫比乌斯反演的第二形式,就是令
update 2024.8.5
为什么上面推导的时候我们要用
这其实是因为这道题目有
,然后就可以利用莫比乌斯反演了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构