首页 > 其他 > 详细

UVALive - 3521 Joseph's Problem (整除分块)

时间:2019-02-08 15:16:01      阅读:187      评论:0      收藏:0      [点我收藏+]

给定$n,k$$(1\leqslant n,k\leqslant 10^9)$,计算$\sum\limits _{i=1}^nk\: mod\:i$

通过观察易发现$k\%i=k-\left \lfloor \frac{k}{i} \right \rfloor*i$,因此我们考虑把$\left \lfloor \frac{k}{i} \right \rfloor$的值相同的$i$分成一组直接求和,复杂度为$O(\sqrt{n})$。

整除分块原理(选自某dalao博客)

 1 #include<bits/stdc++.h>
 2 
 3 using namespace std;
 4 typedef long long ll;
 5 ll n,k;
 6 
 7 int main() {
 8     while(scanf("%lld%lld",&n,&k)==2) {
 9         ll ans=0;
10         for(ll l=1,r; l<=n; l=r+1) {
11             r=k/l&&k/(k/l)<n?k/(k/l):n;
12             ans+=k*(r-l+1)-(k/l)*((l+r)*(r-l+1)/2);
13         }
14         printf("%lld\n",ans);
15     }
16     return 0;
17 }

 

UVALive - 3521 Joseph's Problem (整除分块)

原文:https://www.cnblogs.com/asdfsag/p/10356175.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!