【题解】Luogu-P4240 毒瘤之神的考验
可以得到:
证明考虑 的展开式。
选取中间的式子带进去化简。
于是无脑反演可以得到:
里面有关于 的部分,不能直接预处理某个函数接上数论分块。
设 暴力卷积 可以预处理。
再设 ,由于 ,所以合法状态数是 的,可以 vector
开空间预处理,递推式 。
但是这样必须逐个枚举 ,但我们希望数论分块。
之后比较优美之处在于,上界 和枚举的 看起来可以平衡,也就是当 较大时, 较小,可以暴力预处理,而 较小时暴力逐个算就完了。
这时候我们不再关心 了,主要是把所有 的值都列出来,此时还需要知道 的值,于是设 ,那么有递推式 。
这样就只要设定一个阈值 ,当 时使用 计算,具体是形如 ,其他枚举 用 计算。预处理 时钦定 ,这样状态数是 。
复杂度分析大致是分暴力预处理 ,两种计算答案几部分加和,于是有 。
点击查看代码
int t;
int n,m,B=40;
int pr[maxn],mu[maxn],phi[maxn];
bool vis[maxn];
int inv[maxn],f[maxn];
vector<int> g[maxn];
vector<int> h[41][41];
inline void linear_sieve(){
mu[1]=1,phi[1]=1;
for(int i=2;i<=lim;++i){
if(!vis[i]) pr[++pr[0]]=i,mu[i]=-1,phi[i]=i-1;
for(int j=1;j<=pr[0]&&i*pr[j]<=lim;++j){
vis[i*pr[j]]=1;
mu[i*pr[j]]=-mu[i],phi[i*pr[j]]=phi[i]*phi[pr[j]];
if(i%pr[j]==0){
mu[i*pr[j]]=0,phi[i*pr[j]]=phi[i]*pr[j];
break;
}
}
}
inv[1]=1;
for(int i=2;i<=lim;++i) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
for(int i=1;i<=lim;++i){
for(int j=1;i*j<=lim;++j){
int now=(1ll*mu[i]*j*inv[phi[j]]%mod+mod)%mod;
f[i*j]=(f[i*j]+now)%mod;
}
}
for(int i=0;i<=lim;++i) g[0].push_back(0);
for(int i=1;i<=lim;++i){
g[i].push_back(0);
for(int j=1;i*j<=lim;++j){
g[i].push_back(0);
g[i][j]=(g[i-1][j]+phi[i*j])%mod;
}
}
for(int j=1;j<=B;++j){
for(int k=1;k<=B;++k){
h[j][k].push_back(0);
for(int i=1;i<=lim&&i*j<=lim&&i*k<=lim;++i){
h[j][k].push_back(0);
h[j][k][i]=(h[j][k][i-1]+1ll*f[i]*g[j][i]%mod*g[k][i]%mod)%mod;
}
}
}
}
int ans;
int main(){
linear_sieve();
t=read();
while(t--){
n=read(),m=read();
if(n>m) swap(n,m);
ans=0;
for(int i=1;i<=min(m/B,n);++i){
ans=(ans+1ll*f[i]*g[n/i][i]%mod*g[m/i][i]%mod)%mod;
}
for(int l=m/B+1,r;l<=n;l=r+1){
r=min(n/(n/l),m/(m/l));
ans=(ans+(h[n/l][m/l][r]-h[n/l][m/l][l-1]+mod)%mod)%mod;
}
printf("%d\n",ans);
}
return 0;
}
作者:SoyTony
出处:https://www.cnblogs.com/SoyTony/p/Solution_on_Luogu-P4240.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
合集:
题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效