BZOJ1257 [CQOI2007] 余数之和sum
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1257
Description
给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod i表示k除以i的余数。例如j(5, 3)=3 mod 1 + 3 mod 2 + 3 mod 3 + 3 mod 4 + 3 mod 5=0+1+0+3+3=7
Input
输入仅一行,包含两个整数n, k。
Output
输出仅一行,即j(n, k)。
Orz教主我看到题全不会做照着教主的题解打的……
http://www.cnblogs.com/JSZX11556/p/4685732.html
事实证明我只适合做个文化课选手,今天在颓废准备退役
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring> 5 using namespace std; 6 typedef long long ll; 7 int n,k; ll ans = 0; 8 int main(){ 9 scanf("%d%d",&n,&k); 10 if (n >= k) ans += (ll) (k) * (n - k), n = k - 1; 11 for(int l = 1; l <= n;){ 12 int t = k / l, r = t ? k / t : n; 13 if (r > n) r = n; 14 ans += (ll) (k) * (r - l + 1) - (ll) (t) * (l + r) * (r - l + 1) / 2; 15 l = r + 1; 16 } 17 printf("%lld\n",ans); 18 return 0; 19 }