首页 > 其他分享 >类欧几里得

类欧几里得

时间:2024-03-18 17:24:44浏览次数:19  
标签:lfloor frac bmod 欧几里得 rfloor sum jc

题目

主要分析这道题目的做法,大致也就是类欧的用处。

设 \(f(a,b,c,n)=\sum_{i=0}^n \lfloor \frac{ai+b}{c} \rfloor,g(a,b,c,n)=\sum_{i=0}^n \lfloor \frac{ai+b}{c} \rfloor^2,h(a,b,c,n)=\sum_{i=0}^n i \lfloor \frac{ai+b}{c} \rfloor\)。

首先考虑 \(f\) 的转移:

设 \(m=\lfloor \frac{an+b}{c} \rfloor\) 。

  • \(a=0: f(a,b,c,n)=(n+1) \lfloor \frac{b}{c} \rfloor\)。

  • \(a \geq c\) 或 \(b \geq c:\)

\(f(a,b,c,n) = \sum_{i=0}^n \lfloor \frac{(a \bmod c)i+b \mod c}{c} \rfloor + i \lfloor \frac{a}{c} \rfloor +(n+1) \lfloor \frac{b}{c} \rfloor\)

\(=f(a \bmod c,b\bmod c,c,n)+\frac{n(n+1)}{2} \lfloor \frac{a}{c} \rfloor + (n+1) \lfloor \frac{b}{c} \rfloor\)

  • \(else:\)

\(f(a,b,c,n)=\sum_{i=0}^n \sum_{j=1}^m [j \leq \lfloor \frac{ai+b}{c} \rfloor]\)

\(=\sum_{i=0}^n \sum_{j=0}^{m=1} [jc+c < ai+b+1]\)

\(=\sum_{j=0}^{m-1} \sum_{i=0}^n [jc+c < ai+b+1]\)

\(=\sum_{j=0}^{m-1} \sum_{i=0}^n [ai > jc+c-b-1]\)

\(=\sum_{j=0}^{m-1}(n-\lfloor \frac{jc+c-b-1}{a} \rfloor)\)

\(=nm-\sum_{j=0}^{m-1}(\lfloor \frac{jc+c-b-1}{a} \rfloor)\)

\(=nm-f(c,c-b-1,a,m-1)\)

然后就类似于一个递归的过程。

时间复杂度分析参考求 \(\gcd\) 的过程 , \(\gcd(a,b)=\gcd(b,a \bmod b)\),这个的时间复杂度是 \(\log n\) 的。

然后观察上面转移的 \(a,c\) 两维,容易得到相同的结论,所以时间复杂度也是 \(\log n\) 的。

然后考虑 \(g,h\) 的转移,这两个的转移相互之间需要互相递归,就一起写了。

  • \(a=0:\)

\(g(a,b,c,n) = (n+1) \lfloor \frac{b}{c} \rfloor^2\)

\(h(a,b,c,n) = \frac{n(n+1)}{2} \lfloor \frac{b}{c} \rfloor\)

  • \(a \geq c\) 或 \(b \geq c:\)

\(g(a,b,c,n)=\sum_{i=0}^n (\lfloor \frac{(a \bmod c)i+b \bmod c}{c} \rfloor+i \lfloor \frac{a}{c} \rfloor+\lfloor \frac{b}{c} \rfloor)^2\)

\(=\sum_{i=0}^n \lfloor \frac{(a \bmod c)i+b \bmod c}{c} \rfloor^2+2(i\lfloor \frac{a}{c} \rfloor+\lfloor \frac{b}{c} \rfloor)\lfloor \frac{(a \bmod c)i+b \bmod c}{c} \rfloor +(i \lfloor \frac{a}{c} \rfloor+\lfloor \frac{b}{c} \rfloor)^2\)

\(=g(a \bmod c,b \bmod c,c,n)+2 \lfloor \frac{a}{c} \rfloor h(a \bmod c,b \bmod c,c,n)+2 \lfloor \frac{b}{c} \rfloor f(a \bmod c,b \bmod c,c,n) + \frac{n(n+1)(2n+1)}{6} \lfloor \frac{a}{c} \rfloor^2+\frac{n(n+1)}{2} \lfloor \frac{a}{c} \rfloor \times \lfloor \frac{b}{c} \rfloor+(n+1) \lfloor \frac{b}{c} \rfloor^2\)

\(h(a,b,c,n)=\sum_{i=0}^n i(\lfloor \frac{(a \bmod c)i+b \bmod c}{c} \rfloor+i\lfloor \frac{a}{c} \rfloor+\lfloor \frac{b}{c} \rfloor)\)

\(=h(a \bmod c,b \bmod c,c,n)+\frac{n(n+1)(2n+1)}{6} \lfloor \frac{a}{c} \rfloor + \frac{n(n+1)}{2} \lfloor \frac{b}{c} \rfloor\)

  • \(else:\)

\(g(a,b,c,n)=2 \sum_{i=0}^n \sum_{j=1}^m[jc \leq ai+b]-f(a,b,c,n)\)

\(=2 \sum_{i=0}^n \sum_{j=0}^{m-1} j[jc + c < ai+b+1] + f(a,b,c,n)\)

\(=2 \sum_{j=0}^{m-1} j \sum_{i=0}^n [jc+c < a_i+b+1] + f(a,b,c,n)\)

\(=2 \sum_{j=0}^{m-1} j \sum_{i=0}^n [a_i > jc+c-b-1] + f(a,b,c,n)\)

\(=2 \sum_{j=0}^{m-1} j \sum_{i=0}^n (n-\lfloor \frac{jc+c-b-1}{a} \rfloor) + f(a,b,c,n)\)

\(=m(m-1)n-2h(c,c-b-1,a,m-1) + f(a,b,c,n)\)

\(h(a,b,c,n)=\sum_{i=0}^n i \sum_{j=1}^m [jc \leq ai+b]\)

\(=\sum_{i=0}^n i \sum_{j=0}^{m-1} [jc+c < ai+b+1]\)

\(=\sum_{j=0}^{m-1} \sum_{i=0}^n i[jc+c<ai+b+1]\)

\(=\frac{n(n+1)m}{2}-\frac{1}{2} (\sum_{j=0}^{m-1} \lfloor \frac{jc+c-b-1}{a} \rfloor ^2+\sum_{j=0}^{m-1} \lfloor \frac{jc+c-b-1}{a} \rfloor)\)

\(=\frac{n(n+1)m}{2} - \frac{g(c,c-b-1,a,m-1)}{2} - \frac{f(c,c-b-1,a,m-1)}{2}\)

上面直接做时间复杂度就是 \(\Theta(T \log n)\)。

一个需要注意的小细节就是如果将三个分开来求会有很多算重的部分,时间复杂度比较大。

解决的方案是考虑将 \(f,g,h\) 定义在结构体当中转移,具体可以参考代码实现。

时间复杂度 \(\Theta(T \log n)\)。

代码

标签:lfloor,frac,bmod,欧几里得,rfloor,sum,jc
From: https://www.cnblogs.com/AntelopeWang/p/18080980

相关文章

  • 拓展欧几里得算法
    一、拓展欧几里得算法1.1算法简析根据裴蜀定理,对任意\(a\)和\(b\),一定存在\(x\)和\(y\),使\(ax+by=\text{gcd}(a,b)\)。拓展欧几里得算法不仅能求出\(a\)和\(b\)的最大公约数,而且能找到一对\((x,y)\)使该方程成立。设求解\(ax+by=\text{gcd}(a,b)\)......
  • 基本操作之——多维空间欧几里得距离距离计算及标量积计算
    dev_clear_window()dev_disp_text('欧几里得距离计算','window',200,200,'black','box_color','#00ffffc0')V1:=[18.8,132.4,33,19.3]dev_disp_text('V1='+V1,'window',220,200,'black',......
  • 类欧几里得算法
    要求类似于这样的东西:\[\begin{align*}f(n,a,b,c)&=\sum\limits_{i=0}^n{\left\lfloor\frac{ai+b}{c}\right\rfloor}\\g(n,a,b,c)&=\sum\limits_{i=0}^n{\left\lfloor\frac{ai+b}{c}\right\rfloor}^2\\h(n,a,b,c)&=\sum\limits_{i=0}^......
  • 对最大公约数求法和扩展欧几里得算法的简要概述
    目录1.最大公约数(gcd)1.1更相减损术时间复杂度分析1.2辗转相除法(欧几里得算法)时间复杂度分析2.最小公倍数(lcm)3.裴蜀定理(贝祖定理)3.1扩展欧几里得算法(exgcd)1.最大公约数(gcd)数论中,通常用\(d\|\a\)表示\(d\)能整除\(a\),即\(......
  • C语言解题 || 小乐乐与欧几里得
    题目:小乐乐最近在课上学习了如何求两个正整数的最大公约数与最小公倍数,但是他竟然不会求两个正整数的最大公约数与最小公倍数之和,请你帮助他解决这个问题。输入描述:每组输入包含两个正整数n和m。(1≤n≤109,1≤m≤109)输出描述:对于每组输入,输出一个正整数,为n和m的最大公约数......
  • 类欧几里得算法
    模板题:P5170【模板】类欧几里得算法复述题解:我们记\(f(a,b,c,n)=\sum\limits_{i=0}^{n}\Big\lfloor\dfrac{ai+b}{c}\Big\rfloor\,,\g(a,b,c,n)=\sum\limits_{i=0}^{n}i\Big\lfloor\dfrac{ai+b}{c}\Big\rfloor\,,\h(a,b,c,n)=\sum\limits_{i=0}^{n}{\Big\lfloor......
  • 欧几里得算法
    欧几里得算法用于求解两个数\(a,b\)的最大公约数,\(\gcd(a,b)=\gcd(b,a\bmodb)\),为了方便证明,我们约定\(a>b\),证明:设\(r=a\bmodb=a-k\cdotb\),\(d\mida\)且\(d\midb\),显然\(a=k\cdotb+r\),那么\(\frac{r}{d}=\frac{a}{d}-\frac{k\cdot......
  • 扩展欧几里得算法
    扩欧代码(时间复杂度O(logn))求ax+by=gcd(a,b)的一组整数解 intgcd(inta,intb){ if(b==0)returna; returngcd(b,a%b);}intexgcd(inta,intb,int&x,int&y){ if(b==0) { x=1,y=0; returna; } intx1,y1,d; d=exgcd(b,a%b,x1,y1); x=y1,y=x1-a/b*y1; re......
  • 扩展欧几里得算法
    扩展欧几里得算法裴蜀定理(Bézout'slemma)定义设\(a,b\)是不全为零的整数,对任意整数\(x,y\),满足\(\gcd(a,b)\midax+by\),且存在整数\(x,y\),使得\(ax+by=\gcd(a,b)\).证明对于第一点由于\(\gcd(a,b)\mida,\gcd(a,b)\midb\)所以\(\gcd(a,b)\midax,\gcd(a,b)\mid......
  • 扩展欧几里得算法
    同余方程\(ax\equivb(\modm)\)二元一次方程\(ax+by=c\),其中\(a,b,c\)为已知的正整数这两者可以相互转化,显然对于这个二元一次方程,有:\(ax\modb=c\modb\),可以转化为\(ax\equivc(modb)\)裴蜀定理当我们考虑一个二元一次方程解的情况,我们发现:1.可能无解2.有解即有......