这题要推一下式子,注意涉及到取模的式子都要尽量展成减去下取整的形式。
注意,这里求和符号是求到n,因此分块里面 l 的范围就是l<=n,然后对于n大于k的情况需要特判一下。
1 #include "bits/stdc++.h" 2 using namespace std; 3 typedef long long LL; 4 LL n,k; 5 int main(){ 6 LL i,j; 7 LL l,r,ans=0ll; 8 scanf("%lld%lld",&n,&k); 9 ans=n*k; 10 for (l=1;l<=n;l=r+1){ 11 if (k/l!=0) r=min(n,(k/(k/l))); 12 else r=n; 13 ans-=(k/l)*(r-l+1)*(r+l)/2; 14 } 15 printf("%lld",ans); 16 return 0; 17 }
未来是什么样,未来会发生什么,谁也不知道。
但是我知道,
起码从今天开始努力,
肯定比从明天开始努力,
要快一天实现梦想。
千里之行,始于足下! ——《那年那兔那些事儿》