本文共 1064 字,大约阅读时间需要 3 分钟。
题目链接:
题解:这是一道数学规律题,经过打表我们可以发现商相等的情况下呈现等差数列,公差就是商,这样我们就可以缩短时间去计算;
代码:
#include#include #include #include 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); }}
转载地址:http://vbsgi.baihongyu.com/