经典类欧:
(F(n,a,b,c)=sum_{x=0}^n lfloor frac{ax+b}{c} floor)
当(age c~or~bge c)时,(F(n,a,b,c)=F(n,a\%c,b\%c,c)+lfloor frac{b}{c} floor*(n+1)+lfloor frac{a}{c} floor*n*(n+1)/2)
设(m=lfloor frac{an+b}{c}
floor)
(sum_{x=0}^n lfloor frac{ax+b}{c}
floor)
(sum_{x=0}^n sum_{j=1}^m [lfloor frac{ax+b}{c}
floor ge j])
(sum_{x=0}^n sum_{j=0}^{m-1} [lfloor frac{ax+b}{c}
floor ge j+1])
(sum_{x=0}^n sum_{j=0}^{m-1} [ ax ge jc+c-b])
(sum_{x=0}^n sum_{j=0}^{m-1} [ ax > jc+c-b-1])
(sum_{x=0}^n sum_{j=0}^{m-1} [ x > lfloor frac{jc+c-b-1}{a}
floor])
(sum_{j=0}^{m-1} n-lfloor frac{jc+c-b-1}{a}
floor)
(=nm-f(c,c-b-1,a,m-1))
边界(m=0)时,return 0;
经典类欧应用:
-
(lfloor frac{x}{2^k} floor-2lfloor frac{x}{2^{k+1}} floor)来表示二进制第(k)位。
-
求(ax\% p<c(xin[0,n]))的数量,(=F(n,a,p,c)-F(n,a,p-c,c))
变体类欧:
(G(l,r,x,p))表示最小的数(a)满足(lle ax\%ple r)
因为(ax\% p)能表示的数形如(k*gcd(x,p)),所以当(lceil frac{l}{gcd(x,p)} ceil *gcd(x,p)>r)时无解。
当(lceil frac{l}{x} ceil *x le r)时,答案显然就是:(lceil frac{l}{x} ceil)。
否则:
(lle ax\%ple r)
(lle ax - bp le r)
(-r le bp - ax le -l)
因为此时(r\%x > l\%x),所以相当于:
(-r \% xle bp \% x le -l \%x)
注意这个(\% x)的值域在([0,x))。
调用(b=G(-r \% x,-l \%x,p \% x,x))。
则(a=lfloor frac{bp}{x} floor + lfloor frac{-r\%x+r}{x} floor)