數(shù)據(jù)結(jié)構(gòu)-二分法求冪-C

二分法求冪

數(shù)據(jù)結(jié)構(gòu)中二分法運用到求冪提高計算效率方式,算法精簡這里做個簡單解釋及代碼

原理自析

如求2^32: 代表底數(shù)跟指數(shù)尿这,最終結(jié)果result

1.判斷底數(shù)是否為0 為0 則直接輸出0朽缎;

2.底數(shù)不為0時稠集,判斷指數(shù)是否為0撮执,為0則輸出1;

3.底數(shù)指數(shù)均不為0時沙兰,result=1氓奈,,進行運算:

A.指數(shù)與2求余的結(jié)果,如果為1則將result*底數(shù)鼎天;并且底數(shù)(新)= 底數(shù)(舊)*底數(shù)(舊)

B.指數(shù)與2求模的結(jié)果舀奶,作為新的指數(shù),

3.最終當指數(shù)與2就模為0時训措,輸出最終結(jié)果result

result只是將指數(shù)為1的數(shù)據(jù)進行最終乘法計算伪节,(黑色字體為result相乘的數(shù)據(jù))

2^6? =(2*2)^3

????????=(2*2)^1 *(2*2)^2

????????=(4)^1 *(4)^2

? ? ? ? =(4)^1 *(4*4)^1

????????=(4)^1?*(16)^1

? ? ? ? =64


#include <iostream>

using namespace std;

int a, b;? //利用二分法快速求a^b

int main(int argc, char *argv[]) {

cin >> a >> b;

while (true)

{

int result = 1;

if (a == 0)

cout << 1 << endl;

else if (b == 0)

cout << 1 << endl;

else

{

while (b != 0)

{

if (b % 2 == 1)

{

result *= a;

}

a *= a;

b /= 2;

}

}

cout << "結(jié)果:" << result << endl;

cin >> a >> b;

}

return 0;


備注:以上二分法基本思路完成,通過參考資料給指數(shù)求余和求模绩鸣,其實可以通過位運算進一步提高計算性能

b % 2等價于 b & 1怀大,因為B為偶數(shù)時,其二進制最后一位一定是0呀闻,B為奇數(shù)時化借,其二進制最后一位一定是1;因此做與計算為0則為偶數(shù)捡多,計算為1則為奇數(shù)

b / 2 等價于 b >> 1 ,因為B/2相當于將B的二進制每一位向后移動1位蓖康;

參考進階資料公式 用于獲取最終結(jié)果后三位

(a + b) % p = (a % p + b % p) % p (1)

(a - b) % p = (a % p - b % p ) % p (2)

(a * b) % p = (a % p * b % p) % p (3)

while(b>0) {

if(b&1) {//此處等價于if(b%2==1)

result = result * a%1000;}

b>>=1;//此處等價于b=b/2

a= (a* a) %1000;

?}

return result;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铐炫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蒜焊,更是在濱河造成了極大的恐慌倒信,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泳梆,死亡現(xiàn)場離奇詭異鳖悠,居然都是意外死亡,警方通過查閱死者的電腦和手機优妙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門乘综,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人套硼,你說我怎么就攤上這事卡辰。” “怎么了邪意?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵九妈,是天一觀的道長。 經(jīng)常有香客問我抄罕,道長允蚣,這世上最難降的妖魔是什么于颖? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任呆贿,我火速辦了婚禮,結(jié)果婚禮上森渐,老公的妹妹穿的比我還像新娘做入。我一直安慰自己,他們只是感情好同衣,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布竟块。 她就那樣靜靜地躺著,像睡著了一般耐齐。 火紅的嫁衣襯著肌膚如雪浪秘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天埠况,我揣著相機與錄音耸携,去河邊找鬼。 笑死辕翰,一個胖子當著我的面吹牛夺衍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播喜命,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼沟沙,長吁一口氣:“原來是場噩夢啊……” “哼河劝!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起矛紫,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赎瞎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后颊咬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體煎娇,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年贪染,在試婚紗的時候發(fā)現(xiàn)自己被綠了缓呛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡杭隙,死狀恐怖哟绊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情痰憎,我是刑警寧澤票髓,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站铣耘,受9級特大地震影響洽沟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蜗细,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一裆操、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧炉媒,春花似錦踪区、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至白粉,卻和暖如春传泊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鸭巴。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工眷细, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奕扣。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓薪鹦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子池磁,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355