把整个序列进行拆分成[k,k/2),[k/2, k/3), [k/3,k/4)...k[k/a, k/b)的形式,对于k/i(整除)相同的项,k%i成等差数列。
1 /*by SilverN*/ 2 #include<algorithm> 3 #include<iostream> 4 #include<cstring> 5 #include<cstdio> 6 #include<cmath> 7 using namespace std; 8 long long n,m,k; 9 int main(){ 10 while(scanf("%lld%lld",&n,&k)!=EOF){ 11 int i,j; 12 long long ans=0; 13 for(i=1;i<=n;i=m+1){ 14 m=k/i; 15 if(!m)m=n; 16 else m=min(k/m,n); 17 ans+=(k%i+k%m)*(m-i+1)/2; 18 } 19 printf("%lld\n",ans); 20 } 21 return 0; 22 }