1257: [CQOI2007]余数之和
https://www.lydsy.com/JudgeOnline/problem.php?id=1257
分析:
$\sum\limits_{n=1}^N k \ mod\ n$
当n > k时,k mod n都是k,所以直接求就好了。
另一种情况:
$\sum\limits_{n=1}^N k - \frac{k}{n} \times n$
然后对于$\frac{k}{n}$这里进行分块。
代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 5 LL get(int l,int r) { 6 l --; 7 LL t1 = 1ll * (l + 1) * l / 2; // long long 8 LL t2 = 1ll * (r + 1) * r / 2; 9 return t2 - t1; 10 } 11 12 int main() { 13 14 int n,k; cin >> n >> k; 15 LL ans = 0; 16 if (n > k) { 17 ans += 1ll * (n - k) * k;n = k; 18 } 19 int pos; 20 for (int i=1; i<=n; i=pos+1) { 21 pos = k / (k / i); 22 if (pos > n) pos = n; 23 ans += 1ll * k * (pos - i + 1); 24 ans -= 1ll * (k / i) * get(i,pos); 25 } 26 cout << ans; 27 return 0; 28 }
原文地址:https://www.cnblogs.com/mjtcn/p/9351490.html
时间: 2024-11-05 17:27:08