{{adMap.article_top.title}}
{{adMap.article_top.cta}}

#教學 教學文(零) 快速冪
程式設計板 {{ articleMoment(createdAt) }}

其實我本來想要在第0篇(?)講組合數的 不過組合數需要用到模逆元 模逆元需要用到快速冪 所以就先講快速冪啦~ ***底下所有的log都是以2為底哦*** 快速冪是什麼呢? 首先先來說程式設計怎麼做「a的n次方」 (後面我都會把「a的n次方」寫成「a^n」哦) 最直覺的想法就是 int ans=1; for (int i=0; i<n; i++)  ans*=a; 這個方法一定是正確的 但是一個好的程式除了要求正確性之外 還要求好的執行效率 上面那個程式片段的時間複雜度很明顯是O(n) (不知道時間複雜度的可以去看資訊之芽上課的ppt https://sprout.tw/algo2018/ppt_pdf/complexity.pdf (這是pdf檔)) 於是 有人想到一個好方法 如果先求出a^1、a^2、a^4、a^8…… 有了a^1 平方就可以得到a^2 有了a^2 平方就可以得到a^4 以此類推 若n是2的整數次方 要算a^n是多少 只要算a^(n/2) 再平方就好了 那麼 求出a^n的時間複雜度就是O(log(n)) 那如果n不是2的整數次方 該怎麼辦? 只要用上面算的過程中 得到的那幾個數字去湊就好了! 例如 a^13=(a^8)*(a^4)*(a^1) 用上面的方法 a^8、a^4、a^1在O(log(n))的時間複雜度就可以得到 而乘起來的過程 最多也不會乘超過log(n)次 所以複雜度是O(log(n)) 快速冪就這麼完成了! Code: http://codepad.org/JGPrPFou *小更新* B8 有更短更精簡的code 可以去看看! 另外 還有另一種做法: 對於任意的n 如果要知道a^(2n)是多少 只要先知道a^n的值 再平方就可以了 如果要知道的是a^(2n+1)的值 那就先算a^n的值 再平方 再乘上a就是答案 這個做法的時間複雜度也是O(log(n)) 雖然真的硬要比執行效率的話 理論上會略為慢於第一種做法 但是在比賽中 數量級正確的做法通常都不會TLE的 而且我覺得這種寫法的code稍微簡單一點(個人感覺啦) 所以我是推薦這種的 Code: http://codepad.org/ljX3mEzV 以上是這次的快速冪教學! 說實話 因為我只看過一次第一種做法的code 所以code寫得不怎麼優@@ 如果有更好的寫法拜託告訴我 然後有問題都提出來哦~ 下一篇預告:模逆元


  回文

你可能有興趣的文章...

{{adMap.article_bottom.cta}}
{{adMap.article_bottom.title}}
{{adMap.article_bottom.content}}

全部留言

匿名

匿名

B1 {{commentMoment( "2018-05-08T13:21:16.714Z" )}}

痾...

痾...
0
B2 {{commentMoment( "2018-05-08T13:24:58.336Z" )}}

學霸

收合內層留言icon {{comments[1].isShow ? '收合' : '展開' }}1則留言
學霸
0
B2-1 (原 Po)   {{commentMoment( "2018-05-08T13:24:58.336Z" )}}

呃呃 什麼東東 哪有學霸@@

呃呃 什麼東東 哪有學霸@@
0
B3 {{commentMoment( "2018-05-08T14:09:09.937Z" )}}

 數學戰神

收合內層留言icon {{comments[2].isShow ? '收合' : '展開' }}1則留言
 數學戰神
0
B3-1 (原 Po)   {{commentMoment( "2018-05-08T14:09:09.937Z" )}}

@@ 什麼東啦 話說 矩陣來留言 那我下一篇是不是應該要先來說說矩陣快速冪🤔🤔

@@ 什麼東啦 話說 矩陣來留言 那我下一篇是不是應該要先來說說矩陣快速冪🤔🤔
0
B4 {{commentMoment( "2018-05-09T04:23:51.606Z" )}}

所以我說 矩陣快速冪呢(敲碗(*゚∀゚)

收合內層留言icon {{comments[3].isShow ? '收合' : '展開' }}1則留言
所以我說 矩陣快速冪呢(敲碗(*゚∀゚)
1
B4-1 (原 Po)   {{commentMoment( "2018-05-09T04:23:51.606Z" )}}

真的要矩陣快速冪哦@@ 那 就再下一篇吧! 已經預告要寫的東西不要改比較好

真的要矩陣快速冪哦@@ 那 就再下一篇吧! 已經預告要寫的東西不要改比較好
0
B5 {{commentMoment( "2018-05-09T07:23:49.624Z" )}}

好喔等你(๑•̀ㅁ•́๑)✧

好喔等你(๑•̀ㅁ•́๑)✧
0
B6 {{commentMoment( "2018-05-09T13:23:57.576Z" )}}

可以啊 很期待喔 雖然我也不會 只會矩陣而已

收合內層留言icon {{comments[5].isShow ? '收合' : '展開' }}1則留言
可以啊 很期待喔 雖然我也不會 只會矩陣而已
0
B6-1 (原 Po)   {{commentMoment( "2018-05-09T13:23:57.576Z" )}}

其實矩陣快速冪 就是用快速冪的概念去做矩陣乘法 就這樣 XDDD (好啦這樣講根本等於沒講 等我把第二篇的模逆元弄完 就來解釋矩陣快速冪囉!)

其實矩陣快速冪 就是用快速冪的概念去做矩陣乘法 就這樣 XDDD (好啦這樣講根本等於沒講 等我把第二篇的模逆元弄完 就來解釋矩陣快速冪囉!)
0
匿名

匿名

B7 {{commentMoment( "2018-05-09T16:19:08.754Z" )}}

為什麼看到這篇文讓我想到離散數學

收合內層留言icon {{comments[6].isShow ? '收合' : '展開' }}1則留言
為什麼看到這篇文讓我想到離散數學
0
B7-1 (原 Po)   {{commentMoment( "2018-05-09T16:19:08.754Z" )}}

我沒學過離散數學 所以我不知道有沒有關聯@@

我沒學過離散數學 所以我不知道有沒有關聯@@
0
匿名

匿名

B8 {{commentMoment( "2018-05-10T05:12:15.177Z" )}}

第一種寫法其實可以超簡單(? http://codepad.org/g9kYz7sc

收合內層留言icon {{comments[7].isShow ? '收合' : '展開' }}1則留言
第一種寫法其實可以超簡單(? http://codepad.org/g9kYz7sc
0
B8-1 (原 Po)   {{commentMoment( "2018-05-10T05:12:15.177Z" )}}

我對那種方法不熟 抱歉@@ 我把上面放code的地方標註一下你這一樓哦!

我對那種方法不熟 抱歉@@ 我把上面放code的地方標註一下你這一樓哦!
0
B9 {{commentMoment( "2018-05-10T15:56:13.054Z" )}}

呃 模逆元?快速冪??? 費馬小定理? 呃,那如果mod 的數不是質數呢。。。小定理炸裂w

收合內層留言icon {{comments[8].isShow ? '收合' : '展開' }}1則留言
呃 模逆元?快速冪??? 費馬小定理? 呃,那如果mod 的數不是質數呢。。。小定理炸裂w
0
B9-1 (原 Po)   {{commentMoment( "2018-05-10T15:56:13.054Z" )}}

那個會在模逆元的第二篇說哦 因為那是比較偏向程式設計的領域 第一篇只是讓大家了解模逆元的意義

那個會在模逆元的第二篇說哦 因為那是比較偏向程式設計的領域 第一篇只是讓大家了解模逆元的意義
0
B10 {{commentMoment( "2018-05-10T15:57:15.698Z" )}}

而且矩陣快速冪。。。就只是定義完矩陣乘法就沒了= = 其實那些東西比較偏向數學(?

收合內層留言icon {{comments[9].isShow ? '收合' : '展開' }}1則留言
而且矩陣快速冪。。。就只是定義完矩陣乘法就沒了= = 其實那些東西比較偏向數學(?
0
B10-1 (原 Po)   {{commentMoment( "2018-05-10T15:57:15.698Z" )}}

呃呃 資訊本來就滿數學的啦 所以滿難分開的

呃呃 資訊本來就滿數學的啦 所以滿難分開的
0
B11 {{commentMoment( "2018-05-11T05:10:43.623Z" )}}

好喔 謝啦

收合內層留言icon {{comments[10].isShow ? '收合' : '展開' }}1則留言
好喔 謝啦
0
B11-1 (原 Po)   {{commentMoment( "2018-05-11T05:10:43.623Z" )}}

😁😁

😁😁
0
匿名

匿名

B12 {{commentMoment( "2018-05-11T17:12:20.758Z" )}}

資工系必修 離散數學((我們學校是這樣啦

收合內層留言icon {{comments[11].isShow ? '收合' : '展開' }}1則留言
資工系必修 離散數學((我們學校是這樣啦
0
B12-1 (原 Po)   {{commentMoment( "2018-05-11T17:12:20.758Z" )}}

我還是高中生 所以沒有聽過 抱歉@@

我還是高中生 所以沒有聽過 抱歉@@
0
B13 {{commentMoment( "2018-05-12T05:45:09.099Z" )}}

鈾-235

收合內層留言icon {{comments[12].isShow ? '收合' : '展開' }}1則留言
鈾-235
0
B13-1 (原 Po)   {{commentMoment( "2018-05-12T05:45:09.099Z" )}}

我那時候想不到名字要叫什麼 就隨便亂取了XDD

我那時候想不到名字要叫什麼 就隨便亂取了XDD
0
匿名

匿名

B14 {{commentMoment( "2018-05-12T07:16:30.079Z" )}}

B12表示:為什麼一個高中生比我這個大學生猛qq 而且我還資工系 怎麼辦

收合內層留言icon {{comments[13].isShow ? '收合' : '展開' }}1則留言
B12表示:為什麼一個高中生比我這個大學生猛qq 而且我還資工系 怎麼辦
0
B14-1 (原 Po)   {{commentMoment( "2018-05-12T07:16:30.079Z" )}}

呃呃 其實還好啦 我們也只是先聽過而已 大學四年學到的東西 遠大於高中用的到的 所以到了畢業的時候 前面先修的優勢就沒差多少了啦 (而且 我以後應該是不會唸資工了XD)

呃呃 其實還好啦 我們也只是先聽過而已 大學四年學到的東西 遠大於高中用的到的 所以到了畢業的時候 前面先修的優勢就沒差多少了啦 (而且 我以後應該是不會唸資工了XD)
0
B15 {{commentMoment( "2018-05-12T11:52:16.835Z" )}}

原來是這樣啊

收合內層留言icon {{comments[14].isShow ? '收合' : '展開' }}1則留言
原來是這樣啊
0
B15-1 (原 Po)   {{commentMoment( "2018-05-12T11:52:16.835Z" )}}

嘿啊XD

嘿啊XD
0
B16 {{commentMoment( "2018-05-13T02:20:43.092Z" )}}

哈哈

哈哈
0


登入後發表留言






確定要刪除此文章?
#教學 教學文(零) 快速冪

其實我本來想要在第0篇(?)講組合數的 不過組合數需要用到模逆元 模逆元需要用到快速冪 所以就先講快

檢舉{{reportFloor? '留言B'+reportFloor: '文章'}}
檢舉{{'原po回覆B'+reportFloor+'留言'}}
請選擇刪除文章原因
請選擇刪除留言原因
您即將進入之文章內容需滿十八歲方可瀏覽

根據「電腦網路內容分級處理辦法」修正條文第六條第三款規定,已於網站首頁或各該限制級網頁,依台灣網站分級推廣基金會規定作標示。若您尚未年滿十八歲,麻煩點選離開。若您已滿十八歲,一樣不可將本區之內容派發、傳閱、出售、出租、交給或借予年齡未滿18歲的人士瀏覽閱讀,或將本網站內容向該人士出示、播放或放映。

離開
問題讀取中...稍待60秒...