UVA1363
实际上思路很简单,推荐做这道题之前,自己了解一下整数分块
推荐学习.整数分块
分析
这道题是让我们求
实际上,还可以把这个式子写成
也就等于
通过整数分块,也就能知道
这个式子的权值始终唯一
所以设
由设可得
代码实现自然就简单了
只不过要记住坑点,有多组测试数据!
#include<bits/stdc++.h>
using namespace std;
long long n,k;
long long ans;
int main(){
while(cin>>n>>k){
ans=n*k;
for(long long l=1,r;l<=n;l=r+1){
r=(k/l==0)?n:min(n,k/(k/l));
ans-=(((l + r)*(r-l+1))>>1)*(k/l);
}
printf("%lld\n",ans);
}
return 0;
}