1. 程式人生 > >bzoj1257: [CQOI2007]余數之和sum

bzoj1257: [CQOI2007]余數之和sum

blank div str 余數 sin mil define algo return

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