日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

你理解快速幂吗?

發(fā)布時間:2025/4/5 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 你理解快速幂吗? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

快速冪用來求解什么問題?
用來計算ab % 1000這樣的問題。
a的b次方問題

引例

問題舉例:
保留后三位,則是取余1000.

兩種方法來求ab
第零種(陣亡):pow函數(shù)
pow(a,b)%1000,這樣過不了,是肯定的。

第二種:直接 (a*a)%1000的做法,這樣的時間復(fù)雜度是O(b)
取決于多少個a相乘。
思路:每計算1次a*a,就取余1000,這樣位數(shù)不會超過3位,不會因為數(shù)據(jù)太大越界。

代碼

#include<iostream> using namespace std;int main() {long long a,b;cin>>a>>b;int n=a;//臨時變量for(int i=1;i<b;++i)n=a*n%1000;cout<<n;return 0; }

快速冪

第二種:快速冪
先說快速冪的時間復(fù)雜度O(logb),b是乘冪數(shù)。

a的b次方,我們把它強(qiáng)行拆分。

對于ab ,如果b太大(這里假定b是偶數(shù)),我們先計算a的b/2次方,

比如 a4=a2 *a2可以先計算a2,要計算a2先求a1

如果b是奇數(shù),則做如下處理 :取出一個a,剩余部分仍然是偶數(shù)形式。比如:a5=a2 *a2*a1

遞歸實現(xiàn)

代碼

#include<iostream> using namespace std; typedef long long ll;ll fastPow(ll a, ll b, ll m){if(b == 0)return 1;else if(b % 2 == 1)//奇數(shù)冪return a * fastPow(a, b - 1, m) % m;else{//偶數(shù)冪ll num = fastPow(a, b/2, m) % m;return num * num % m;} } //復(fù)雜度O(logn)int main() {ll a,b;const int digits=1000;cin>>a>>b;int result=fastPow(a,b,digits);cout<<result; }

參考博客:寫的不錯https://blog.csdn.net/Harington/article/details/87602682

總結(jié)

以上是生活随笔為你收集整理的你理解快速幂吗?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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