数学问题 余数 等差序列 有趣

把整个序列进行拆分成[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 }

 

本文为博主原创文章,转载请注明出处。