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