1257: [CQOI2007]余數之和
阿新 • • 發佈:2018-07-22
sin geo bit hit turn wrap times color port
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 longlong 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 }
1257: [CQOI2007]余數之和