题目大意:
求
∑in
k
题解:
只要一步变形
直接分块 n−−√ 就可以了。
注意下细节,具体代码。
code:
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#define LL long long
using namespace std;
LL sum(int l,int r){return (LL)(r-l+1)*(LL)(l+r)/2;}
int main()
{
int n,k;scanf("%d %d",&n,&k);
LL ans=0;int pos;
for(int i=1;i<=n;i=pos+1)
{
if(k/i==0) pos=n;
else pos=min((k/(k/i)),n);
ans+=(LL)k*(pos-i+1)-(LL)(k/i)*sum(i,pos);
}
printf("%lld",ans);
}