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

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

生活随笔

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

编程问答

快速幂运算 《挑战程序设计竞赛》

發(fā)布時(shí)間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 快速幂运算 《挑战程序设计竞赛》 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2018-3-1

這里我就對(duì)數(shù)進(jìn)行說(shuō)明,并沒(méi)有對(duì)矩陣進(jìn)行求解。

求x^n,其中n是一個(gè)比較大的數(shù)

如果用一般的方法的話(huà),我們會(huì)直接進(jìn)行累乘即可,時(shí)間復(fù)雜度是O(n),但是這個(gè)好像并不能滿(mǎn)足我們的要求,我們來(lái)分析一下:n的二進(jìn)制表示是這樣的,
n=t1*2^k1+t2*2^k2+t3*2^k3…,其中k1,k2,k3…為0,1,2…,t1,t2…只能是0或者1,附上代碼:

#include<iostream> using namespace std;int x,n;int main(){while (cin>>x>>n){int r=1;while (n){if (n&1) r*=x;x*=x;n>>=1;}cout<<r<<endl;}return 0; }

我們依次判斷n的二進(jìn)制表示的每一位的值,如果是0的話(huà),r不做任何操作,反之,如果是1的話(huà),那么當(dāng)前的值要乘上x(chóng),有人可能會(huì)問(wèn),這里的x是個(gè)什么東西,x每一次都要乘上它本身。比如說(shuō)n=10110,那么從左到右依次為:n=1*2^4+0*2^3+1*2^2+1*2^1+0*2^0,那么第i次循環(huán)前,x就為x^(2^(i-1)),那么當(dāng)?shù)趇位為1時(shí),就表示r的值要乘x^(2^(i-1))。

新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!

總結(jié)

以上是生活随笔為你收集整理的快速幂运算 《挑战程序设计竞赛》的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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