类欧问题复习:

经典类欧:

(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)

原文地址:https://www.cnblogs.com/coldchair/p/13100578.html