P5170 類歐幾里得演算法

2022-03-01 20:10:16 字數 3255 閱讀 2435

【題意】已知\(n,a,b,c\),求

\[\begin

f_(a,b,c,n)&=\sum_^n\lfloor\dfrac\rfloor\\

f_(a,b,c,n)&=\sum_^n\lfloor\dfrac\rfloor^2\\

f_(a,b,c,n)&=\sum_^n\lfloor\dfrac\rfloor*i\\

\end

\]【預備】

設\(m=\lfloor\dfrac\rfloor,\ t_=\lfloor\dfrac\rfloor,\ t_=\lfloor\dfrac\rfloor\)。

定義\([\text]\)為真值表示式。

簡單的引理,當\(a,b,c\in z​\)時

【限界】a=0時直接計算。

【式一】對原式變形

\[f_(a,b,c,n)

=\sum_^nt_\times i+t_+\lfloor\dfrac\rfloor\\

=t_\times\dfrac+t_\times(n+1)+ f_(a\bmod c,b\bmod c,c,n)

\]當\(t1=t2=0\)即\(a且\(b時,

\[f_(a,b,c,n)=

\sum_^n\sum_^m [j\le\dfrac]

=\sum_^n\sum_^m [j\le\lfloor\dfrac\rfloor]\\

=\sum_^m\sum_^n[j\le\lfloor\dfrac\rfloor]

=\sum_^m\sum_^n[cj-b\le ai]

=\sum_^m\sum_^n[cj-b-1< ai]\\

=\sum_^m\sum_^n[\lfloor\dfrac\rfloor< i]

=\sum_^m(n-\lfloor\dfrac\rfloor)\\

=mn-\sum_^m\lfloor\dfrac\rfloor

=mn-\sum_^\lfloor\dfrac\rfloor\\

=mn-f_(c,c-b-1,a,m-1)

\]【式二】對原式變形

\[f_(a,b,c,n)

=\sum_^n(t_\times i+t_+\lfloor\dfrac\rfloor)^2\\

=\sum_^n \begin

(t_\times i)^2+t_^2+\lfloor\dfrac\rfloor^2\\

+2t_t_*i\\

+2t_i\lfloor\dfrac\rfloor\\

+2t_\lfloor\dfrac\rfloor

\end\\

=\begin

t_^2\sum_^ni^2+t_^2*(n+1)+f_(a\bmod c,b\bmod c,c,n)\\

+2t_t_\sum_^n i\\

+2t_f_(a\bmod c,b \bmod c,c,n)\\

+2t_f_(a\bmod c,b \bmod c,c,n)

\end\\

\]當\(t1=t2=0\)即\(a且\(b時,

\[f_(a,b,c,d)=

\sum_^n\lfloor\dfrac\rfloor

=\sum_^n\sum_^m\sum_^m[\lfloor\dfrac\rfloor< i\text\lfloor\dfrac\rfloor< i]\\

=\sum_^n\sum_^m\sum_^m [\max(\lfloor\dfrac\rfloor,\lfloor\dfrac\rfloor)< i]\\

=\sum_^m\sum_^m \sum_^n[\max(\lfloor\dfrac\rfloor,\lfloor\dfrac\rfloor)< i]\\

=\sum_^m\sum_^m n-\max(\lfloor\dfrac\rfloor,\lfloor\dfrac\rfloor)\\

=nm^2-\sum_^m\sum_^m\max(\lfloor\dfrac\rfloor,\lfloor\dfrac\rfloor)\\

=nm^2-2*\sum_^m\lfloor\dfrac\rfloor*(j-1)-\sum_^m \lfloor\dfrac\rfloor\\

=nm^2-\sum_^ \lfloor\dfrac\rfloor*j-\sum_^ \lfloor\dfrac\rfloor\\

=nm^2-f_(c,c-b-1,a,m-1)-2*f_(c,c-b-1,a,m-1)

\]【式三】對原式變形

\[f_(a,b,c,n)=\sum_^n\lfloor\dfrac\rfloor*i

=\sum_^n (t_\times i+t_+\lfloor\dfrac\rfloor)*i\\

=\sum_^n t_\times i^2+t_\times i+\lfloor\dfrac\rfloor\times i\\

=t_\sum_^ni^2+t_\sum_^ni+f_(a\bmod c,b\bmod c,c,n)

\]當\(t1=t2=0\)即\(a且\(b時,定義\(p(j)=\lfloor\dfrac\rfloor\)。

\[f3(a,b,c,d)

=\sum_^n\sum_^m [j\le\lfloor\dfrac\rfloor]*i

=\sum_^m\sum_^n[\lfloor\dfrac\rfloor< i]*i\\

=\sum_^m\sum_^ni

=\sum_^m \dfrac(p(j)+1+n)(n-p(j))\\

=\sum_^m \dfrac(n\times p(j)-p^2(j)+n-p(j)+n^2-n\times p(j))\\

=\sum_^m \dfrac(-p^2(j)+n-p(j)+n^2)\\

=\dfrac(c,c-b-1,a,m-1)-f_(c,c-b-1,a,m-1)+nm+n^2m}

\]【時間複雜度】如果每個都單獨搜尋的話,大概因該會炸吧。。考慮到三個函式的遞迴模式都很**,乾脆用乙個結構體存下三個值。再參考第一題的分析,狀態數目是\(\log\)級別的。

#include #define ll long long 

using namespace std;

const ll mod=998244353;

const ll i2=499122177;

const ll i6=166374059;

inline ll s1(ll n)

inline ll s2(ll n)

struct node else

} int main()

return 0;

}

P5170 模板 類歐幾里得演算法

對於類歐幾里得演算法,本質上可以理解為一條直線下的整點個數,是乙個矩形區域。然後將整數部分提出,就可以使得這個直線斜率較小,那麼我們就可以轉化為上方三角形部分,然後就又可以減小斜率了。然後對於不同型別的式子我們都可以對下方的整點定義貢獻,然後交換列舉順序之後,就是討論每類整點的貢獻,然後就可以將問題...

類歐幾里得演算法

比較快速地算出下面的式子 f n,a,b,c,k 1,k 2 sum limits n x lfloor frac rfloor 不妨假設現在 a geq c 或 b geq c 那麼 sum limits n x lfloor frac rfloor sum limits n x lfloor f...

類歐幾里得演算法

這個演算法用於求一條直線下整點個數,我們定義 f a,b,c,n sum lfloor frac rfloor 其他幾個乘係數的擴充套件不想學了tat a ge c 或 b ge c 當 a ge c 或 b ge c 時,我們考慮把分子對 c 的商和餘數分別提出來,那麼有 begin f a,b,...