瞎講 類歐幾里得入土教程

2022-02-23 19:51:41 字數 1552 閱讀 5515

假設我們現在得到一條直線\(y=ax+b\),現在要數出\(x \in [0,n]\)時,在\(x\)正半軸和這條直線之間的整點個數,\(n \le 10^\)

這個方程一定可以化為這樣的形式

\[y=\dfrac

\]列舉\(x \in [0,n]\),直接算其整點個數,答案就是

\[\sum_^n \lfloor \dfrac \rfloor

\]考慮如何快速計算這個式子,我們考慮如何化為子問題

向下取整有這乙個性質(其他性質可以由此推出):

\[\lfloor \dfrac b\rfloor=\lfloor \dfrac \rfloor=\lfloor \dfrac \rfloor + \lfloor\dfrac a b\rfloor

\]然後有兩個重要而顯然的性質:

\[\lfloor \rfloor \le

\]類似的

\[\lceil \rceil \ge

\]還有相互轉換法則

\[\lfloor \rfloor =\lceil \rceil

\]類似的

\[\lceil \rceil = \lfloor\rfloor

\]我覺得不用解釋了吧...

有了上面的芝士,我們考慮

\[\sum_^n \lfloor \dfrac \rfloor

\]時,稍微化歸一下:

現在就只要計算\(a,b< c\)的情況即可,進行一波和式變換

\[\sum_^n \lfloor \rfloor

\]創造條件

\[=\sum_^n \sum_^ \rfloor} 1

\]和式套路

\[= \sum_^n\sum_^ \rfloor} [j \le \lfloor \rfloor]=\sum_^ \rfloor} \sum_^n [j \le \lfloor \rfloor]

\]根據前置芝士

\[=\sum_^ \rfloor} \sum_^n [cj \le ]

\]考慮\(i\)

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

\]根據前置芝士

\[=\sum_^ \rfloor} \sum_^n [\lceil\rceil \le i ]

\]此時可以直接算出來第二個\(\sigma\)的值

\[=\sum_^ \rfloor} (n-\lceil\rceil+1)

\]根據前置芝士

\[=\sum_^ \rfloor} (n-\lfloor\rfloor+1)

\]提出來

\[=(n+1)\lfloor \rfloor -\sum_^ \rfloor} \lfloor\rfloor

\]後面就是乙個子問題啊!問題規模降了一半以上(當\(c=1\)的時候可以直接等差數列求和\(o(1)\)算)

所以解決原問題的複雜度為

\[t(n)\le o(1)+t()

\]根據主定理

\[t(n)\le \log_2 n

\]那麼問題來了,為啥叫做類歐幾里得演算法呢?因為複雜度證明是相似的...滑稽

萌新瞎講 分塊

推薦!將規模為n的問題,分成 n 塊,每塊規模也是 n 那麼對塊內的操作和整個範圍的操作的複雜度平均,可以在較優的空間複雜度下,將每次操作的複雜度降低到 sqrt 以較低的編碼 複雜度解決問題。initially,我們分好了塊。對於原序列元素a pos 在哪個塊 po s 1n 1 so,我們可以維...

類歐幾里得小記

每次看了很快就忘了,乾脆寫一篇部落格,來加深記憶。設 f a,b,c,n sum lfloor dfrac rfloor g a,b,c,n sum i lfloor dfrac rfloor g a,b,c,n sum rfloor 2 m lfloor dfrac rfloor 當a c時,f ...

類歐幾里得演算法

比較快速地算出下面的式子 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...