bzoj1257: [CQOI2007]余数之和sum
Posted CHerish_OI
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; }
以上是关于bzoj1257: [CQOI2007]余数之和sum的主要内容,如果未能解决你的问题,请参考以下文章
BZOJ 1257: [CQOI2007]余数之和sum神奇的做法,思维题