bzoj1257: [CQOI2007]余数之和sum
1257: [CQOI2007]余数之和sum
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
正解找规律....
%%%AKCqhzdy(看这位大神的博客吧!)
#include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #define qread(x)x=read(); using namespace std; typedef long long LL; inline int read() { int f=1,x=0;char ch; while(ch<'0' || ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();} return f*x; } LL n,k; int main() { qread(n);qread(k); LL ans=0; for(LL l=1,r;l<=n;l=r+1,r=n) { LL s=k/l; if(s!=0)r=min(k/s,n); ans+=(k-s*l+k-s*r)*(r-l+1)/2; } printf("%lld",ans); return 0; }