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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

你理解快速幂吗?

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

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

引例

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

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

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

代碼

#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; }

快速冪

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

a的b次方,我們把它強行拆分

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

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

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

遞歸實現

代碼

#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)//奇數冪return a * fastPow(a, b - 1, m) % m;else{//偶數冪ll num = fastPow(a, b/2, m) % m;return num * num % m;} } //復雜度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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。