欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

P2261-[CQOI2007]余数求和【数论,约数】

发布时间:2023/12/3 50 豆豆
生活随笔 收集整理的这篇文章主要介绍了 P2261-[CQOI2007]余数求和【数论,约数】 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

正题

评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P2261


题目大意

∑i=1nk%i\sum^{n}_{i=1}k\%ii=1nk%i


解题思路

k%ik\%ik%i展开一下,k−i∗⌊k/i⌋k-i*\lfloor k/i\rfloorkik/i,然后答案就是
∑i=1nk−i∗⌊k/i⌋\sum^{n}_{i=1}k-i*\lfloor k/i\rfloori=1nkik/i
将k取出来
nk−∑i=1ni∗⌊k/i⌋nk-\sum^{n}_{i=1}i*\lfloor k/i\rfloornki=1nik/i
然后用等差公式分多块计算∑i=1ni∗⌊k/i⌋\sum^{n}_{i=1}i*\lfloor k/i\rfloori=1nik/i


code

#include<cstdio> #include<algorithm> using namespace std; long long n,ans,k; int main() {scanf("%lld%lld",&n,&k);ans=n*k;for(int x=1,gx;x<=n;x=gx+1){gx=k/x?min(k/(k/x),n):n;ans-=(k/x)*(x+gx)*(gx-x+1)/2;}printf("%lld",ans); }

总结

以上是生活随笔为你收集整理的P2261-[CQOI2007]余数求和【数论,约数】的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。