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&#39; Choice

UVALive-7261 Xiongnu's Land

UVALive 3989Ladies' Choice(稳定婚姻问题)

UVALive 6176Faulhaber's Triangle