@rebirth1120
2019-11-14T01:58:48.000000Z
字数 519
阅读 1014
解题报告
给定正整数 ,
求 .
可以变为 ,
这一坨可以数论分块, 每次再求个等差序列和就好了.
#include<bits/stdc++.h>#define ll long longusing namespace std;int n,x;ll ans;ll sum(ll a,ll b){ return (a+b)*(b-a+1)/2; }int main(){// freopen("som.in","r",stdin);cin>>n>>x;for(int i=1;i*i<=x;i++){if(i<=n&&x/i!=i){ ans+=x%i; }if(x/(i+1)>=n) continue;int a=min(x/i,n),b=x/(i+1)+1;ans+=(ll)(a-b+1)*x-sum((ll)b,(ll)a)*i;}if(n>x) ans+=(ll)(n-x)*x;printf("%lld\n",ans);return 0;}
