nyist-508(余数求和)
生活随笔
收集整理的這篇文章主要介紹了
nyist-508(余数求和)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:http://acm.nyist.net/JudgeOnline/problem.php?pid=508
題解:這是一道數學規律題,經過打表我們可以發現商相等的情況下呈現等差數列,公差就是商,這樣我們就可以縮短時間去計算;
代碼:
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; typedef long long LL; int main() {LL n,k;while(~scanf("%lld%lld",&n,&k)){LL Dl,Dr,r,l,ans = 0;if(n >= k){ans += (n - k) * k;for(LL i = 1; i*i <= k; i++){l = k / i,r = k / (i+1) + 1;Dl = k % l,Dr = k % r;ans += (Dl + Dr)*(l - r + 1)/2;}for(LL i = r-1; i >= 1; i--)ans += k%i;}else{for(LL i = 1; i*i <= n; i++){l = k / i,r = k / (i+1) + 1;if(n >= r){l = min(l,n);Dl = k % l,Dr = k % r;ans += (Dl + Dr)*(l - r + 1)/2;}}for(LL i = r-1; i >= 1; i--)if(i <= n)ans += k%i;}printf("%lld\n",ans);} }總結
以上是生活随笔為你收集整理的nyist-508(余数求和)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 李猛:从MongoDB迁移到ES后,我们
- 下一篇: 资深架构专家聊架构之道:规划、简化和演化