開學第二週 two 快速冪)

2021-09-12 07:44:57 字數 1233 閱讀 8963

時間過得真是快呀,第二週就要結束了,感覺有時自己在瞎忙。

關於快速冪及矩陣快速冪的題目,我在寒假就遇見過了,那時一看是新知識點,沒有立即消化吸收,只是簡單收藏在csdn中,想著:抽空再看吧!(現在看來這個想法很危險),可是新知識如雨後新竹般,來不及學習的早已埋在收藏中了。

唉,明日復明日,明日何其多?要警醒

快速冪:————————————————————————————————————————————

快速冪解決的是求 n ^ k 的值的問題;

需要注意的是這裡的k非常大,往往是1e7之上的。(這裡假設最後求得的值不會溢位);

那麼用樸素的求法來求 n^ k的過程是:n * n * n * n*n ..... *n;這樣的求法往往會超時。那麼我們就要換一種求法了。我們來個例子:

在現實生活中,如果讓你求2^20次方,你會怎麼求?一般的求法是

1. 讓 2 * 2 = 4,這樣就能算出2^2的值了。                    

2. 讓 4 * 4 =16,這樣就能算出2^4的值了。                    

3. 讓16 * 16 = 256,這樣就能算出2 ^ 8的值了              

4. 讓256 * 256 = 65536,這樣就能算出2 ^ 16的值了                

5. 讓65536 * (2 ^ 4) = 1048576,這樣就能算出2 ^ 20的值了。

這樣我們只需要5步就能算出2^20的值了,如果是按樸素的求法需要20步。

而且隨著k的增大,他們的差距也會越來越大。(o(n) 和 o( log2(n) )的差距。

但是第二種求法的話,我們需計算出最後一步的a * b中的b (也就是舉例中的65536 * (2 ^ 4) 中的(2 ^ 4)) ,這樣一來,當k比較的話,最後一步也很麻煩。

在這裡我們採用一種和第二種方法思想上類似的方法(沒錯,就是二分) 我們以a ^ 19來 舉例:如圖

#includeint fastpower(int a , int k);	//這裡假設a ^ k不會溢位 

int main()

int fastpower(int a , int k)

return ans;

}

開學第二週

開學已經兩周了,然後我們就又放假了 問號臉?總感覺一到上學的時候就又該放假了 仔細想想好像是這樣 不過相比於上半年來說,下半年的放假時間還算是少的,只不過對於我來說都一樣,不管在哪都是學習 貌似有點悲哀 只不過是學習的東西不一樣罷了。就學業的學習上來說,這一學期的學科難度遠超上一學期,因為多了很多的...

開學第二週 one 全排列)

一 stl提供了兩個用來計算排列組合關係的演算法,分別是next permutation和prev permutation。首先我們必須了解什麼是 下乙個 排列組合,什麼是 前乙個 排列組合。考慮三個字元所組成的序列。這個序列有六個可能的排列組合 abc,acb,bac,bca,cab,cba。這些...

第二週(快速排序)

通過找出乙個基準數,然後從左向右,從右向左依次找出比這個基準數大 小 的數字,然後交換它倆,最後將基準數與每輪判斷的結尾處交換,這樣每輪結束後,剛剛排序的部分都會被分成兩部分,在基準數左邊的數字都比基準數小,在基準數右邊的數字都比基準數大,然後不斷二分下去,最後整體排序完成 此方法主要運用了遞迴與二...