1樓:
令 。我們發現,。
於是,自然地,我們有。
於是,欲求 (迭代 次),只需要求矩陣 的 次冪即可,用二分法可以輕鬆把複雜度從 降低到 。
對於取模的問題,每一步都對向量的每乙個元素取模即可。
2樓:
所以改改快速指數冪的步驟,每一次乘方的時候記得膜***就行了唄至於其他答案說的那道題,原題等價於求遞迴式的值用數學歸納法可以證得
其中或者用逆元算
記得每一步求冪的時候取模
3樓:
如果你問的原題就是Educational Codeforces Round 13的Problem D. Iterated Linear Function
做法:發現從x到f(x)的變換是乙個線性變換,考慮使用矩陣。
一般設計的時候用這樣的形式:
[原始值與輔助數值的行向量] x [變換矩陣(方陣)] = [結果值與輔助數值的行向量]
首先考慮表達出這個變換:f(x)=Ax+B = x*A+1*B
顯然是矩陣乘法中某一行乘某一列的形式
那這樣定下來:
行向量=[x 1]
變換矩陣是2*2的方陣
變換矩陣的第一列為[A B]T
OK,現在考慮變換矩陣的第二列。
我們要考慮到,我們能連續使用這個變換矩陣,使得做一次之後得到f(x),做兩次(向量x變換矩陣x變換矩陣)能得到f(f(x))。
我們要保證這個向量的第二個值為1不變,這樣才能每次乘這個矩陣的時候執行了Ax+B的變換。
顯然,第二列全為0太不負責任了,我們要把這個1照抄過去。
也就是說,0*x+1*1
完美!所以變換矩陣的第二列為[0 1]T
總結一下,我們有:
然後要幾層f(x),你就乘幾次這個變換矩陣。
比如現在要f(f(x)),那就:
要一步到位,求n層巢狀,那就利用結合律,先計算這個變換矩陣冪n次,然後再行向量乘變換矩陣。
——看到冪那麼多次,你就應該知道用O(logn)的快速冪了吧?
Done。
(當然矩陣和向量的設計不是只有這一種,還有其他方式,選乙個自己能理解的記住,然後這類題目就變得友好很多很多了。)
JavaScript語言如何實現等待函式值為真的操作?
navegador 如果你不介意真實阻塞,那使用Atomic.wait,這個喚醒比較麻煩,只能從另乙個worker 喚醒。這個是真實掛起阻塞的 但是不是while那種佔CPU的阻塞 suooq 我怎麼理解你這個問題?我分析下 函式值指的是返回值 獲取函式返回值只有呼叫它 等待值為真,意思是無限制呼叫...
如何快速實現財富自由 ?
小布囈語 如果你問如何實現財富自由,大概會有很多人回答吧,不過答案不外乎書本上的 儲蓄,把鵝養大,讓鵝下蛋 如果你現在是0,就要強制儲蓄的同時要增加收入。大概堅持十年二十年的,有可能實現財富自由。最近看的一些理財書大致都是這些內容。有錢的話,前些年房子比較公升值快,大概折騰個幾年也能不錯,買幾套房子...
C 如何實現自動呼叫建構函式?
夏洋 如果你用C 11的話,直接這麼寫就行了 class UserClass Base 甚至你想只寫成一句 DefValues i,j,k 也是有辦法的。例如 define FIRST a,a define SECOND a,b,b define EMPTY define DEFER1 m m EM...