如何模擬快速冪實現函式迭代?例如f x a x b迭代n次?

時間 2021-06-01 00:57:59

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...