UVALive - 3521 Joseph's Problem (整除分块)
Posted asdfsag
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVALive - 3521 Joseph's Problem (整除分块)相关的知识,希望对你有一定的参考价值。
给定$n,k$$(1leqslant n,kleqslant 10^9)$,计算$sumlimits _{i=1}^nk: mod:i$
通过观察易发现$k\\%i=k-left lfloor frac{k}{i} ight floor*i$,因此我们考虑把$left lfloor frac{k}{i} ight floor$的值相同的$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 ",ans); 15 } 16 return 0; 17 }
以上是关于UVALive - 3521 Joseph's Problem (整除分块)的主要内容,如果未能解决你的问题,请参考以下文章
UVa 1363 Joseph's Problem (等差数列)
UVA 1363 Joseph's Problem 找规律+推导 给定n,k;求k%[1,n]的和。
UVALive 3989 Ladies' Choice