The 2021 CCPC Guangzhou Onsite - K. Magus Night 题解
题意
Marisa Kirisame 有
思路
容斥套容斥套容斥,三层容斥,赛上没想到这么多层,也没想到gcd限制+lcm限制下是可以在2s内跑出来的,麻了
划分
先来个容斥:由于
记(写法可能不标准)
对数组
故
Z
复杂度
B
如果你不会求这个……那么你应该学习 luogu P4450 后再来看这篇题解
总体来说,就是枚举
贡献即为(
复杂度
C
前方容斥套容斥警告
记
后面那个
所以
复杂度O(能过)
复杂度我也分析不清楚,但是不会超过
代码
#include<bits/stdc++.h>
using namespace std;
using i64 = long long;
const int N = 2e5+6;
vector<int> divs[N];
i64 dsum[N] = {0};
int prms[N],cnt=0,mob[N];
bool notP[N] = {false};
const int MOD = 998244353;
i64 qpow(i64 b,int p) {
i64 ret=1;
for(;p;p>>=1,b=b*b%MOD) if(p&1) ret = ret*b%MOD;
return ret;
}
void get_mob() {
mob[1] = 1;
for(int i=2;i<N;++i) {
if(!notP[i]) {
prms[cnt] = i;
++cnt;
mob[i] = -1;
}
for(int j=0;j<cnt;++j) {
if(i*prms[j]>=N) break;
mob[i*prms[j]] = -mob[i];
notP[i*prms[j]] = true;
if(i%prms[j]==0) {
mob[i*prms[j]] = 0;
break;
}
}
}
}
void norm(i64 &x) {
while(x >= MOD) x -= MOD;
while(x < 0) x += MOD;
}
void get_d() {
for(int i=1;i<N;++i) {
for(int j=i;j<N;j+=i) {
divs[j].push_back(i);
dsum[j] += i;
norm(dsum[j]);
}
}
}
int main(int argc, char const *argv[])
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
get_mob();
get_d();
i64 n;
int m,p,q;
cin >> n >> m >> p >> q;
for(int i=0;i<N;++i) {
dsum[i] = qpow(dsum[i],n);
}
i64 ans2=0,ans3=0,ans4=0;
// 2
for(int k=q+1;k<=m;++k) {
int M = m/k;
for(int i=1;i<=M;++i) {
ans2 += mob[i] * qpow(1ll*(M/i)*(M/i+1)/2%MOD*i%MOD*k%MOD, n);
norm(ans2);
}
}
// cout << ans2 << endl;
// 3
for(int k=1;k<=q;++k) {
int M = m/k;
for(int i=1;i<=M;++i) {
i64 tmp = 0;
int P = (p-1)/i/k;
for(int j=1;j<=P;++j) {
for(int d : divs[j]) {
tmp += mob[j/d] * dsum[d] % MOD;
norm(tmp);
}
}
ans3 += mob[i] * tmp * qpow(i*k%MOD,n) % MOD;
norm(ans3);
}
}
// cout << ans3 << endl;
// 4
ans4 = qpow(1ll*m*(m+1)/2%MOD,n);
i64 ans = ans4 - ans2 - ans3;
norm(ans);
cout << ans;
return 0;
}
Living with bustle, hearing of isolation.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!