c++入門必學(xué)算法之快速冪思想及實現(xiàn)
一、什么是快速冪
快速冪算法是用來快速計算指數(shù)表達式的值的,例如 210000000,普通的計算方法 2*2*2*2…乘10000000次,如果一個數(shù)字的計算都要計算那么多次的話,那么這個程序一定是失敗的。
學(xué)完快速冪之后就可以用幾十次計算求出答案了
二、快速冪思想及實現(xiàn)
快速冪思想其實很簡單,就是公式的轉(zhuǎn)換
1、當(dāng)指數(shù)是偶數(shù)時,我們可以讓指數(shù)除以2,底數(shù)乘以底數(shù)
2、當(dāng)指數(shù)是奇數(shù)時,我們可以將指數(shù)變?yōu)槠鏀?shù)
例如 210
- 指數(shù)是偶數(shù),210 = 45
- 指數(shù)是奇數(shù),45 = 4 * 44
- 指數(shù)是偶數(shù), 4 * 44 = 4 * 162
- 指數(shù)是偶數(shù),4 * 162 = 4 * 2561
- 指數(shù)是奇數(shù), 4 * 2561=4 * 256 * 2560
- 指數(shù)為0時停止,那么答案就是計算 4 * 256 = 1024
下面代碼就是模擬這個過程:
#include<iostream>//c++標準頭文件,可以使用cout,cin等標準庫函數(shù)
using namespace std;//命名空間,防止重名給程序帶來各種隱患,使用cin,cout,stack,map,set,vector,queue時都要使用
long long fpow(long long a,long long b){//a是底數(shù),b是指數(shù)
long long ans=1;//初始化答案為1
while(b){//當(dāng)指數(shù)不為0時執(zhí)行
if(b%2==0){//指數(shù)為偶數(shù)時,指數(shù)除以2,底數(shù)乘以2
b/=2;
a*=a;
}else{//指數(shù)為奇數(shù)時,分離指數(shù),ans乘以底數(shù)
ans*=a;
b--;
}
}
return ans;//ans就是答案
}
int main(){
long long n,m;
cin>>n>>m;
cout<<fpow(n,m)<<endl;
}
3、快速冪精簡模板
#include<iostream>
using namespace std;
long long fpow(long long a,long long b){
long long ans=1;
while(b){
if(b&1)ans*=a;
b>>=1;
a*=a;
}
return ans;
}
int main(){
long long n,m;
cin>>n>>m;
cout<<fpow(n,m)<<endl;
}
總結(jié)
到此這篇關(guān)于c++入門必學(xué)算法之快速冪思想及實現(xiàn)的文章就介紹到這了,更多相關(guān)c++快速冪算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

