bzoj1257
一段一段。。
1 #include<cstdio> 2 #include<cstring> 3 #include<ctime> 4 #include<cmath> 5 #include<algorithm> 6 #include<cstdlib> 7 #include<iostream> 8 #define rep(i,l,r) for(int i=l;i<r;i++) 9 typedef long long ll; 10 using namespace std; 11 int n,k; 12 ll ans=0; 13 int main(){ 14 scanf("%d%d",&n,&k); 15 if(n>=k){ 16 ans=ll(k)*ll(n-k); 17 n=k-1; 18 } 19 for(int l=1;l<=n;l++){ 20 int t=k/l,r=k/t; 21 if(r>n) r=n; 22 ans+=ll(k)*ll(r-l+1)-ll(t)*ll(l+r)*ll(r-l+1)/2; 23 l=r; 24 } 25 printf("%lld\n",ans); 26 return 0; 27 }
1257: [CQOI2007]余数之和sum
Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 2534 Solved: 1164
[Submit][Status][Discuss]
Description
给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod i表示k除以i的余数。例如j(5, 3)=3 mod 1 + 3 mod 2 + 3 mod 3 + 3 mod 4 + 3 mod 5=0+1+0+3+3=7
Input
输入仅一行,包含两个整数n, k。
Output
输出仅一行,即j(n, k)。
Sample Input
5 3
Sample Output
7
HINT
50%的数据满足:1<=n, k<=1000 100%的数据满足:1<=n ,k<=10^9
Source