1 条题解
-
0
题目
求 对 998244353 取模,其中,。
题解
以 为例,当 有:
设
研究: 在 中出现了多少次?
例如: 在 中出现了多少次?
在 中出现,即是在 中出现了3次,即出现了 次。
所以可知: 在 $f_2(i)、f_2(2i)、f_2(3i) \dots f_2(\lfloor \frac{n}{i} \rfloor*i )$ 中出现,即是在 中出现了 次。
由此可得: $F_2(n)=\sum\limits_{i=1}^ni^2*\lfloor\frac{n}{i}\rfloor$
同理: $F_0(n)=\sum\limits_{i=1}^n1*\lfloor\frac{n}{i}\rfloor$ , $F_1(n)=\sum\limits_{i=1}^ni*\lfloor\frac{n}{i}\rfloor$ 。代码
#include<bits/stdc++.h> #define LL long long using namespace std; constexpr LL N=1e7+10,mod=998244353; LL F0,F1,F2,inv6; inline LL qpow(LL a,LL b) { LL res=1; for(;b;b>>=1,a=1ll*a*a%mod)if(b&1) res=1ll*res*a%mod; return res; } LL calc(int n) { return 1ll*n*(n+1)%mod*(2*n+1)%mod*inv6%mod; } int main() { int n;scanf("%d",&n); inv6=qpow(6,mod-2); LL ans=F0=F1=F2=0; for(int l=1,r;l<=n;l=r+1) { r=n/(n/l); F2=(F2+ 1ll*(calc(r)-calc(l-1)+mod)%mod*(n/l)%mod)%mod; F1=(F1+ 1ll*(r+l)*(r-l+1)/2 %mod*(n/l)%mod)%mod; F0=(F0+ 1ll*(r-l+1)*(n/l)%mod)%mod; } ans=(2*F2+3*F1+5*F0)%mod; printf("%lld\n",ans); return 0; }
- 1
信息
- ID
- 580
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 215
- 已通过
- 40
- 上传者