OI筆記 關於一類帶 的式子的快速求和

2022-03-10 20:52:42 字數 773 閱讀 2671

\(s(n) = \sum\limits_ i^ka^i\)

這個式子**於sp19997。

魚神的題解裡提到,\(s(n)\)這樣的式子,可以寫成更通用的形式:

\(s(n) = \sum f(i)a^i (i <= n),\)在本題中,\(f(i) = i^k\)

同時也有乙個窩不會證明的神仙結論:

存在乙個次數不高於 \(k\) 的多項式 \(g(x)\),使得 \(s(n)=a^ng(n)-g(0)\)

也就是說,我們只要知道\(g(n)\)和\(g(0)\),就可以快速求出這個式子。

然後我們很容易推得 \(g(n)=(g(n-1)+f(n-1))/a\)

又因為\(g(n)\)是\(k\)次多項式,所以\(k+1\)次差分後其必然是\(0\),即

\(\sum\limits_^(-1)^i\binomg(k+1-i)=0\)

然後設個未知數,把\(g(0)...g(k)\)都解出來,就可以插值求出\(g(n)\)了

然後就沒了。

複雜度\(o(k)\)

\(upd\)

\(on\)

\(2020.4.28:\)

為什麼這個做法有時候會出鍋呢\(?\)

主要是因為這個做法設未知數解方程的過程中可能出現

\(ax=c,a=0,c\neq 0\)的情況或者\(ax=c,a=0,c=0\)的情況\(.\)

這時候一般來說是可以特判的\(,\)比如說當\(f(i) = i^0 = 1\)的時候就可以直接\(o(k)\)插值做自然數冪和\(.\)

OI 關於快速冪的簡單理解

快速冪 因為a b c n a n b n c 所以n m可以分解為n m n a1 n a2 n a3.n ak a1 a2 a3.ak m 所以我們想到,如果存在k我們都知道二進位制轉十進位制時,是對每一位呈上位權,而計算機可以對十進位制數進行位運算,通過位運算可求出二進位制的每一位,tobe ...

帶自加加這一類常會出現的錯誤

只能說,有些錯誤實在太隱蔽了,剛覺得自己會考慮如何更簡潔優化的寫出程式了,但是反而會因為自己的進一步而犯進一步的錯誤 但這是另人高興的錯誤是不哈哈,不能因為怕犯錯誤而不向前 例子來自經典教材 看似兩個一樣的程式,自加類常回出現這種錯覺 void twiddle1 int xp,int yp void...

C 類的理解 一) 類的初識

一 類的意義,以及類與物件 類的內容比較多,但類是物件導向的基礎,所謂物件導向 object 其實就是一種更高層次的模組化,也稱為封裝。c語言中,稍微複雜點的資料結構都是用結構體來寫的,結構體本質上就是把一些相關的資訊打包儲存,比如貓 struct cat 這樣我們通過鍵盤輸入很多貓的資訊就可以用結...