日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

《算法基础》——2.3 求幂运算

發(fā)布時(shí)間:2025/4/5 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《算法基础》——2.3 求幂运算 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本節(jié)書(shū)摘來(lái)自華章計(jì)算機(jī)《算法基礎(chǔ)》一書(shū)中的第2章,第2.3節(jié),作者:(美)羅德·斯蒂芬斯(Rod Stephens)著,更多章節(jié)內(nèi)容可以訪(fǎng)問(wèn)云棲社區(qū)“華章計(jì)算機(jī)”公眾號(hào)查看

2.3 求冪運(yùn)算

有時(shí)程序需要計(jì)算某數(shù)的正整數(shù)次冪,這在該冪指數(shù)不大時(shí)容易完成。例如,73可以通過(guò)計(jì)算7×7×7很容易地得到結(jié)果343。對(duì)于較大的冪,例如7102×187×291,這種計(jì)算過(guò)程是十分緩慢的。
注 計(jì)算較大的冪如7102×187×291可能很緩慢。但如果不是這種求冪運(yùn)算在某些重要密碼學(xué)中得到應(yīng)用,人們也許不會(huì)十分關(guān)心它。
幸運(yùn)的是,有一種較快的方法來(lái)執(zhí)行這種運(yùn)算。這種方法基于乘方運(yùn)算的兩個(gè)關(guān)鍵法則:

當(dāng)這個(gè)冪是二次冪時(shí),第一個(gè)法則可以迅速地計(jì)算出A的冪。
第二個(gè)法則能將這些A的冪結(jié)合以產(chǎn)生想要的結(jié)果。
以下偽代碼展示了這個(gè)算法:

例如要計(jì)算出76。首先算法計(jì)算出71、72、74。由于下一個(gè)指數(shù)8比所需的6大,因此算法停止。

接下來(lái)算法使用第二個(gè)法則來(lái)從已經(jīng)產(chǎn)生的二次冪中生成76。如果將6看作2的冪的和,6=2+4。使用第二個(gè)法則,得到76=72×74=49×2 401=117 649。
執(zhí)行這個(gè)運(yùn)算進(jìn)行兩次乘法來(lái)計(jì)算72和74再加上一次乘法來(lái)獲得最終結(jié)果,即總共進(jìn)行三次乘法運(yùn)算。這比簡(jiǎn)單計(jì)算7×7×7×7×7×7進(jìn)行了更少的乘法運(yùn)算,但在本例中這只是一個(gè)小小的不同。
更普遍地,對(duì)于指數(shù)P,算法進(jìn)行l(wèi)og(P)次運(yùn)算來(lái)得到A的P次冪。然后算法檢驗(yàn)A的二進(jìn)制位數(shù)來(lái)確定它應(yīng)當(dāng)將其中的哪些乘在一起以獲得最終結(jié)果。(如果P的二進(jìn)制位數(shù)是1,那么最終的結(jié)果應(yīng)當(dāng)包含2的相應(yīng)冪。在前例中,6的二進(jìn)制表示是110,因此需要計(jì)算2的二次冪和四次冪,即22和24。)
在二進(jìn)制中,數(shù)值P有l(wèi)og2(P)位,因此總共的運(yùn)行時(shí)間復(fù)雜度是O(log P)+O(log P)=O(log P)。即使P為一百萬(wàn),log(P)大約只有20,因此這個(gè)算法需運(yùn)行20步左右(至多40次乘法)。這比一百萬(wàn)要小得多。
這種算法的一個(gè)限制是當(dāng)指數(shù)很大時(shí),冪增長(zhǎng)得過(guò)快。即使一個(gè)如7300這樣“小”的值也有254個(gè)十進(jìn)制位。這意味著用來(lái)計(jì)算大指數(shù)冪龐大數(shù)相乘的過(guò)程是緩慢的,并且需要大量計(jì)算空間。
幸運(yùn)的是,這種龐大的冪運(yùn)算的最常見(jiàn)應(yīng)用是加密算法,這種算法的運(yùn)算限制在某個(gè)模中。盡管這個(gè)模通常較大,但仍能限制住運(yùn)算數(shù)和結(jié)果的大小。例如如果某模有100位,兩個(gè)100位數(shù)的積就不會(huì)大于200位。那么,接下來(lái)可以再次用這個(gè)模來(lái)得到一個(gè)不大于100位的結(jié)果。雖然用模將每一個(gè)數(shù)減小使得每步運(yùn)算稍微變慢,但也意味著可以計(jì)算幾乎無(wú)限大的值。

總結(jié)

以上是生活随笔為你收集整理的《算法基础》——2.3 求幂运算的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。