专栏文章
题解:AT_abc414_e [ABC414E] Count A%B=C
AT_abc414_e题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miowroxx
- 此快照首次捕获于
- 2025/12/03 02:25 3 个月前
- 此快照最后确认于
- 2025/12/03 02:25 3 个月前
题意
求满足 且 的 的个数
思考
先考虑枚举 ,因为 ,所以 ,即 不是 的因数。
所以每个 对应的个数为 的因数个数 。
两部分分开计算,第一部分的和是 应该没人不会吧,
重点在第二部分,
相当于求 的 个数
也就是对于每个 求其倍数个数,即
答案为
于是变成了数论分块的模板,时间复杂度 。
数论分块(学过的可以跳过了)
用于求 的 算法
的直接暴力,之后每次找到一个 相等的区间一起计算
具体求区间的方法:每次根据上一个区间确定 ,则
证明:
设
则对于区间中的任意一个数 ,
故
代码
CPP#include<bits/stdc++.h>
using namespace std;
long long n,mod=998244353;
int main()
{
scanf("%lld",&n);
long long ans=((__int128)n)*(n+1)/2%mod;
long long i;
for(i=1;i*i<=n;i++)ans=(ans+mod-n/i%mod)%mod;
for(long long l=i,r;l<=n;l=r+1)
{
r=n/(n/l);
ans=(ans+mod-(r-l+1)%mod*(n/l)%mod)%mod;
}
printf("%lld",ans);
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...