【技能点】类欧几里得

类欧几里得可以在 O ( l o g n ) O(logn) O(logn)的复杂度下求解类似以下的式子;
f ( n , a , b , c ) = ∑ i = 0 n ⌊ a i + b c ⌋ f(n,a,b,c)=\sum_{i=0}^{n}\left\lfloor\frac{ai+b}{c}\right\rfloor f(n,a,b,c)=i=0ncai+b
g ( n , a , b , c ) = ∑ i = 0 n i ⌊ a i + b c ⌋ g(n,a,b,c)=\sum_{i=0}^{n}i\left\lfloor\frac{ai+b}{c}\right\rfloor g(n,a,b,c)=i=0nicai+b
h ( n , a , b , c ) = ∑ i = 0 n ⌊ a i + b c ⌋ 2 h(n,a,b,c)=\sum_{i=0}^{n}\left\lfloor\frac{ai+b}{c}\right\rfloor^2 h(n,a,b,c)=i=0ncai+b2

f ( n , a , b , c ) f(n,a,b,c) f(n,a,b,c)函数的计算:

  1. a = 0 a=0 a=0时,原式 = ( n + 1 ) ⌊ b c ⌋ =(n+1)\lfloor\frac{b}{c}\rfloor =(n+1)cb
  2. a ≥ c ∣ ∣ b ≥ c a≥c||b≥c acbc时,
    原 式 = ∑ i = 0 n ⌊ ( ⌊ a c ⌋ c + a % c ) i + ( ⌊ b c ⌋ c + b % c ) c ⌋ = ∑ i = 0 n ⌊ a c ⌋ i + ⌊ b c ⌋ + ⌊ ( a % c ) i + b % c c ⌋ = ⌊ a c ⌋ n ( n + 1 ) 2 + ( n + 1 ) ⌊ b c ⌋ + ∑ i = 0 n ⌊ ( a % c ) i + b % c c ⌋ = ⌊ a c ⌋ n ( n + 1 ) 2 + ( n + 1 ) ⌊ b c ⌋ + f ( n , a % c , b % c , c ) \begin{aligned} 原式 & =\sum_{i=0}^{n}\left\lfloor\frac{(\lfloor\frac{a}{c}\rfloor c+a \% c)i+ (\lfloor\frac{b}{c}\rfloor c+b\% c)}{c}\right\rfloor\\ & = \sum_{i=0}^{n}\lfloor \frac{a}{c} \rfloor i+\lfloor \frac{b}{c} \rfloor+\lfloor\frac{(a\%c)i+b\%c}{c}\rfloor \\ & =\lfloor \frac{a}{c} \rfloor\frac{n(n+1)}{2}+(n+1)\lfloor \frac{b}{c} \rfloor+\sum_{i=0}^{n}\left\lfloor\frac{(a\%c)i+b\%c}{c} \right \rfloor \\ & =\lfloor \frac{a}{c} \rfloor\frac{n(n+1)}{2}+(n+1)\lfloor \frac{b}{c} \rfloor+f(n,a\%c,b\%c,c) \\ \end{aligned} =i=0nc(cac+a%c)i+(cbc+b%c)=i=0ncai+cb+c(a%c)i+b%c=ca2n(n+1)+(n+1)cb+i=0nc(a%c)i+b%c=ca2n(n+1)+(n+1)cb+f(n,a%c,b%c,c)
  3. a &lt; c &amp; &amp; b &lt; c a&lt;c \&amp;\&amp; b&lt;c a<c&&b<c
    原 式 = ∑ i = 0 n ∑ j = 0 ⌊ a i + b c ⌋ − 1 1 = ∑ j = 0 ⌊ a n + b c ⌋ − 1 ∑ i = 0 n [ j &lt; ⌊ a i + b c ⌋ ] \begin{aligned} 原式 &amp; =\sum_{i=0}^{n}\sum_{j=0}^{\lfloor\frac{ai+b}{c}\rfloor-1}1\\ &amp;=\sum_{j=0}^{\lfloor\frac{an+b}{c}\rfloor-1}\sum_{i=0}^{n}\left[j&lt;\left\lfloor\frac{ai+b}{c}\right\rfloor\right]\\ \end{aligned} =i=0nj=0cai+b11=j=0can+b1i=0n[j<cai+b]
    然后对于 j &lt; ⌊ a i + b c ⌋ j&lt;\lfloor\frac{ai+b}{c}\rfloor j<cai+b进行一些变换
    j &lt; ⌊ a i + b c ⌋ ⇔ j + 1 ≤ ⌊ a i + b c ⌋ ⇔ j + 1 ≤ a i + b c ⇔ j c + c ≤ a i + b ⇔ j c + c − b − 1 &lt; a i ⇔ j c + c − b − 1 a &lt; i ⇔ ⌊ j c + c − b − 1 a ⌋ &lt; i \begin{aligned} j&lt;\lfloor\frac{ai+b}{c}\rfloor &amp;\Leftrightarrow j+1≤\lfloor\frac{ai+b}{c}\rfloor\Leftrightarrow j+1≤\frac{ai+b}{c}\\ &amp;\Leftrightarrow jc+c≤ai+b \Leftrightarrow jc+c-b-1&lt;ai\\ &amp;\Leftrightarrow\frac{jc+c-b-1}{a}&lt;i\\ &amp;\Leftrightarrow\left\lfloor\frac{jc+c-b-1}{a}\right\rfloor&lt;i\\ \end{aligned} j<cai+bj+1cai+bj+1cai+bjc+cai+bjc+cb1<aiajc+cb1<iajc+cb1<i
    此时令 m = ⌊ a n + b c ⌋ , t = ⌊ j c + c − b − 1 a ⌋ m=\lfloor\frac{an+b}{c}\rfloor,t=\lfloor\frac{jc+c-b-1}{a}\rfloor m=can+b,t=ajc+cb1
    所以可以得到
    原 式 = ∑ j = 0 ⌊ a n + b c ⌋ − 1 ∑ i = 0 n [ j &lt; ⌊ a i + b c ⌋ ] = ∑ j = 0 m − 1 ∑ i = 0 n [ i &gt; t ] = ∑ j = 0 m − 1 n − t = n m − ∑ j = 0 m − 1 t = n m − ∑ j = 0 m − 1 ⌊ j c + c − b − 1 a ⌋ = n m − f ( m − 1 , c , c − b − 1 , a ) \begin{aligned} 原式 &amp;=\sum_{j=0}^{\lfloor\frac{an+b}{c}\rfloor-1}\sum_{i=0}^{n}\left[j&lt;\left\lfloor\frac{ai+b}{c}\right\rfloor\right]\\ &amp;=\sum_{j=0}^{m-1}\sum_{i=0}^{n}[i&gt;t]\\ &amp;=\sum_{j=0}^{m-1}n-t=nm-\sum_{j=0}^{m-1}t\\ &amp;=nm-\sum_{j=0}^{m-1}\left\lfloor\frac{jc+c-b-1}{a}\right\rfloor\\ &amp;=nm-f(m-1,c,c-b-1,a)\\ \end{aligned} =j=0can+b1i=0n[j<cai+b]=j=0m1i=0n[i>t]=j=0m1nt=nmj=0m1t=nmj=0m1ajc+cb1=nmf(m1,c,cb1,a)

总结 f ( n , a , b , c ) f(n,a,b,c) f(n,a,b,c)的函数值,令 m = ⌊ a n + b c ⌋ m=\lfloor\frac{an+b}{c}\rfloor m=can+b
a = 0 a=0 a=0时, f ( n , a , b , c ) = ( n + 1 ) ⌊ b c ⌋ f(n,a,b,c)=(n+1)\lfloor\frac{b}{c}\rfloor f(n,a,b,c)=(n+1)cb
a ≥ c ∣ ∣ b ≥ c a≥c||b≥c acbc时, f ( n , a , b , c ) = ⌊ a c ⌋ n ( n + 1 ) 2 + ( n + 1 ) ⌊ b c ⌋ + f ( n , a % c , b % c , c ) f(n,a,b,c)=\lfloor \frac{a}{c} \rfloor\frac{n(n+1)}{2}+(n+1)\lfloor \frac{b}{c} \rfloor+f(n,a\%c,b\%c,c) f(n,a,b,c)=ca2n(n+1)+(n+1)cb+f(n,a%c,b%c,c)
a &lt; c &amp; &amp; b &lt; c a&lt;c \&amp;\&amp; b&lt;c a<c&&b<c f ( n , a , b , c ) = n m − f ( m − 1 , c , c − b − 1 , a ) f(n,a,b,c)=nm-f(m-1,c,c-b-1,a) f(n,a,b,c)=nmf(m1,c,cb1,a)
\\
\\
\\
g ( n , a , b , c ) g(n,a,b,c) g(n,a,b,c)函数的计算:
此处主要推导当 a &lt; c &amp; &amp; b &lt; c a&lt;c \&amp;\&amp; b&lt;c a<c&&b<c的情况:
还是令 m = ⌊ a n + b c ⌋ , t = ⌊ j c + c − b − 1 a ⌋ m=\lfloor\frac{an+b}{c}\rfloor,t=\lfloor\frac{jc+c-b-1}{a}\rfloor m=can+b,t=ajc+cb1
原 式 = ∑ i = 0 n i ⌊ a i + b c ⌋ = ∑ i = 0 n ∑ j = 0 ⌊ a i + b c ⌋ − 1 i = ∑ j = 0 ⌊ a n + b c ⌋ − 1 ∑ i = 0 n i [ j &lt; ⌊ a i + b c ⌋ ] = ∑ j = 0 m − 1 ∑ i = 0 n i [ i &gt; t ] = ∑ j = 0 m − 1 ( n − m ) ( m + 1 + n ) 2 = 1 2 [ n m ( n + 1 ) − h ( m − 1 , c , c − b − 1 , a ) − f ( m − 1 , c , c − b − 1 , a ) ] \begin{aligned} 原式 &amp;=\sum_{i=0}^{n}i\left\lfloor\frac{ai+b}{c}\right\rfloor=\sum_{i=0}^{n}\sum_{j=0}^{\lfloor\frac{ai+b}{c}\rfloor-1} i\\ &amp;=\sum_{j=0}^{\lfloor\frac{an+b}{c}\rfloor-1} \sum_{i=0}^{n}i\left[j&lt;\left\lfloor\frac{ai+b}{c}\right\rfloor\right]\\ &amp;=\sum_{j=0}^{m-1}\sum_{i=0}^{n}i[i&gt;t]\\ &amp;=\sum_{j=0}^{m-1}\frac{(n-m)(m+1+n)}{2}\\ &amp;=\frac{1}{2}[nm(n+1)-h(m-1,c,c-b-1,a)-f(m-1,c,c-b-1,a)]\\ \end{aligned} =i=0nicai+b=i=0nj=0cai+b1i=j=0can+b1i=0ni[j<cai+b]=j=0m1i=0ni[i>t]=j=0m12(nm)(m+1+n)=21[nm(n+1)h(m1,c,cb1,a)f(m1,c,cb1,a)]

总结 g ( n , a , b , c ) g(n,a,b,c) g(n,a,b,c)的函数值,令 m = ⌊ a n + b c ⌋ m=\lfloor\frac{an+b}{c}\rfloor m=can+b
a = 0 a=0 a=0时, g ( n , a , b , c ) = n ( n + 1 ) 2 ⌊ b c ⌋ g(n,a,b,c)=\frac{n(n+1)}{2}\lfloor\frac{b}{c}\rfloor g(n,a,b,c)=2n(n+1)cb
a ≥ c ∣ ∣ b ≥ c a≥c||b≥c acbc时, g ( n , a , b , c ) = ⌊ a c ⌋ n ( n + 1 ) ( 2 n + 1 ) 6 + ⌊ b c ⌋ n ( n + 1 ) 2 + g ( n , a % c , b % c , c ) g(n,a,b,c)=\lfloor \frac{a}{c} \rfloor\frac{n(n+1)(2n+1)}{6}+\lfloor \frac{b}{c} \rfloor\frac{n(n+1)}{2}+g(n,a\%c,b\%c,c) g(n,a,b,c)=ca6n(n+1)(2n+1)+cb2n(n+1)+g(n,a%c,b%c,c)
a &lt; c &amp; &amp; b &lt; c a&lt;c \&amp;\&amp; b&lt;c a<c&&b<c g ( n , a , b , c ) = 1 2 [ n m ( n + 1 ) − h ( m − 1 , c , c − b − 1 , a ) − f ( m − 1 , c , c − b − 1 , a ) ] g(n,a,b,c)=\frac{1}{2}[nm(n+1)-h(m-1,c,c-b-1,a)-f(m-1,c,c-b-1,a)] g(n,a,b,c)=21[nm(n+1)h(m1,c,cb1,a)f(m1,c,cb1,a)]

\\
\\
\\
h ( n , a , b , c ) h(n,a,b,c) h(n,a,b,c)函数的计算:
此处主要推导当 a &lt; c &amp; &amp; b &lt; c a&lt;c \&amp;\&amp; b&lt;c a<c&&b<c的情况:
首先进行一步代换: n 2 = 2 n ( n + 1 ) 2 − n = ( 2 ∑ i = 0 n i ) − n n^2=2\frac{n(n+1)}{2}-n=\left( 2\sum_{i=0}^{n}i\right)-n n2=22n(n+1)n=(2i=0ni)n
原 式 = ∑ i = 0 n ⌊ a i + b c ⌋ 2 = ∑ i = 0 n [ ( 2 ∑ j = 1 ⌊ a i + b c ⌋ j ) − ⌊ a i + b c ⌋ ] = ( 2 ∑ i = 0 n ∑ j = 1 ⌊ a i + b c ⌋ j ) − f ( n , a , b , c ) \begin{aligned} 原式 &amp;=\sum_{i=0}^{n}\left\lfloor\frac{ai+b}{c}\right\rfloor^2\\ &amp;=\sum_{i=0}^{n}\left[\left(2\sum_{j=1}^{\lfloor\frac{ai+b}{c}\rfloor}j\right)-\left\lfloor\frac{ai+b}{c}\right\rfloor\right]\\ &amp;=\left(2\sum_{i=0}^{n}\sum_{j=1}^{\lfloor\frac{ai+b}{c}\rfloor}j\right)-f(n,a,b,c)\\ \end{aligned} =i=0ncai+b2=i=0n2j=1cai+bjcai+b=2i=0nj=1cai+bjf(n,a,b,c)
对于左边一部分:
∑ i = 0 n ∑ j = 1 ⌊ a i + b c ⌋ j = ∑ i = 0 n ∑ j = 0 ⌊ a i + b c ⌋ − 1 ( j + 1 ) = ∑ j = 0 m − 1 ( j + 1 ) ∑ i = 0 n [ j &lt; ⌊ a i + b c ⌋ ] = ∑ j = 0 m − 1 ( j + 1 ) ∑ i = 0 n [ i &gt; t ] = ∑ j = 0 m − 1 ( j + 1 ) ( n − t ) = 1 2 n m ( n + 1 ) − g ( m − 1 , c , c − b − 1 , a ) − f ( m − 1 , c , c − b − 1 , a ) \begin{aligned} \sum_{i=0}^{n}\sum_{j=1}^{\lfloor\frac{ai+b}{c}\rfloor}j &amp;=\sum_{i=0}^{n}\sum_{j=0}^{\lfloor\frac{ai+b}{c}\rfloor-1}(j+1)\\ &amp;=\sum_{j=0}^{m-1}(j+1)\sum_{i=0}^{n}\left[j&lt;\left\lfloor\frac{ai+b}{c}\right\rfloor\right]\\ &amp;=\sum_{j=0}^{m-1}(j+1)\sum_{i=0}^{n}[i&gt;t]\\ &amp;=\sum_{j=0}^{m-1}(j+1)(n-t)\\ &amp;=\frac{1}{2}nm(n+1)-g(m-1,c,c-b-1,a)-f(m-1,c,c-b-1,a)\\ \end{aligned} i=0nj=1cai+bj=i=0nj=0cai+b1(j+1)=j=0m1(j+1)i=0n[j<cai+b]=j=0m1(j+1)i=0n[i>t]=j=0m1(j+1)(nt)=21nm(n+1)g(m1,c,cb1,a)f(m1,c,cb1,a)

综上 h ( n , a , b , c ) = n m ( n + 1 ) − 2 g ( m − 1 , c , c − b − 1 , a ) − 2 f ( m − 1 , c , c − b − 1 , a ) − f ( n , a , b , c ) h(n,a,b,c)=nm(n+1)-2g(m-1,c,c-b-1,a)-2f(m-1,c,c-b-1,a)-f(n,a,b,c) h(n,a,b,c)=nm(n+1)2g(m1,c,cb1,a)2f(m1,c,cb1,a)f(n,a,b,c)

总结 h ( n , a , b , c ) h(n,a,b,c) h(n,a,b,c)的函数值,令 m = ⌊ a n + b c ⌋ m=\lfloor\frac{an+b}{c}\rfloor m=can+b
a = 0 a=0 a=0时, h ( n , a , b , c ) = ( n + 1 ) ⌊ b c ⌋ 2 h(n,a,b,c)=(n+1)\lfloor\frac{b}{c}\rfloor^2 h(n,a,b,c)=(n+1)cb2
a ≥ c ∣ ∣ b ≥ c a≥c||b≥c acbc时, h ( n , a , b , c ) = n ( n + 1 ) ( 2 n + 1 ) 6 ⌊ a c ⌋ 2 + ( n + 1 ) ⌊ b c ⌋ 2 + ⌊ a c ⌋ ⌊ b c ⌋ n ( n + 1 ) + h ( n , a % c , b % c , c ) + 2 ⌊ b c ⌋ f ( n , a % c , b % c , c ) + 2 ⌊ a c ⌋ g ( n , a % c , b % c , c ) h(n,a,b,c)=\frac{n(n+1)(2n+1)}{6}\lfloor\frac{a}{c}\rfloor^2+(n+1)\lfloor\frac{b}{c}\rfloor^2+\lfloor\frac{a}{c}\rfloor \lfloor\frac{b}{c}\rfloor n(n+1)+h(n,a\%c,b\%c,c)+2\lfloor\frac{b}{c}\rfloor f(n,a\%c,b\%c,c)+2\lfloor\frac{a}{c}\rfloor g(n,a\%c,b\%c,c) h(n,a,b,c)=6n(n+1)(2n+1)ca2+(n+1)cb2+cacbn(n+1)+h(n,a%c,b%c,c)+2cbf(n,a%c,b%c,c)+2cag(n,a%c,b%c,c)
a &lt; c &amp; &amp; b &lt; c a&lt;c \&amp;\&amp; b&lt;c a<c&&b<c h ( n , a , b , c ) = 1 2 [ n m ( n + 1 ) − h ( m − 1 , c , c − b − 1 , a ) − f ( m − 1 , c , c − b − 1 , a ) ] h(n,a,b,c)=\frac{1}{2}[nm(n+1)-h(m-1,c,c-b-1,a)-f(m-1,c,c-b-1,a)] h(n,a,b,c)=21[nm(n+1)h(m1,c,cb1,a)f(m1,c,cb1,a)]


const LL p=998244353;
LL i2=499122177,i6=166374059;//2^(-1),6^(-1)
struct data
{
	data(){f=g=h=0;}
	LL f,g,h;
};
data calc(LL n,LL a,LL b,LL c)
{
	LL ac=a/c,bc=b/c,m=(a*n+b)/c,n1=n+1,n21=n*2+1;
	data d;
	if(!a)
	{
		d.f=bc*n1%p;
		d.g=bc*n%p*n1%p*i2%p;
		d.h=bc*bc%p*n1%p;
		return d;
	}
	if(a>=c||b>=c)
	{
		d.f=n*n1%p*i2%p*ac%p+n1*bc%p;
		d.g=ac*n%p*n1%p*n21%p*i6%p+bc*n%p*n1%p*i2%p;
		d.h=ac*ac%p*n%p*n1%p*n21%p*i6%p+bc*bc%p*n1%p+ac*bc%p*n%p*n1%p;
		d.f%=p,d.g%=p,d.h%=p;
		data e=calc(n,a%c,b%c,c);
		d.h+=e.h+2*bc%p*e.f%p+2*ac%p*e.g%p;
		d.g+=e.g,d.f+=e.f;
		d.f%=p,d.g%=p,d.h%=p;
		return d;
	}
	data e=calc(m-1,c,c-b-1,a);
	d.f=n*m%p-e.f,d.f=(d.f%p+p)%p;
	d.g=m*n%p*n1%p-e.h-e.f,d.g=(d.g*i2%p+p)%p;
	d.h=n*m%p*(m+1)%p-2*e.g-2*e.f-d.f,d.h=(d.h%p+p)%p;
	return d;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值