時間複雜度是o(n)級別,而快速冪能做到o(logn)
其實b是可以拆成二進位制的,該二進位制數第i位的權(值)為2^(i-1),
比如說b==11時
11的二進位制是1011,
這三項…
好像…不怎麼不好求…???
//指數**!你可以用longlong 或者用mod也可以
return ret;
}講到二進位制 一般都會想到這兩個小別緻 大寶貝
乙個數 & 1 的結果就是取二進位制的最末位。
y&1 == 0 為偶,y&1 == 1為奇。
再聊聊這個
二進位制從右向左算
就以y==11來看 y=>1011
乘出來的順序是從左向右
也就是 a^ (2^0) * a^ ( 2 ^ 1 ) * a ^ (2^3)
a ^ 11 = a^1 * a^2 * a^8
以及 最後的結果ans 應該是還要再乘乙個剛開始的ans
/*
&運算,就是表示和&&有點類似,但是&&是兩邊的條件成立就成立
&也是這樣,n&1表示如果兩邊的二進位制的最後一位都為1,那麼就成立,否則就不成立
*/#include#include#includeusing namespace std;
#define zz 200907
typedef long long ll;
ll a,b,c,k,ans;
ll power(ll x,ll y)
return ret;
}void solve()
else //等比數列
printf("%lld\n",ans);
}int main()
else
printf("%lld\n",ans)
*/ } return 0;
}
晚上來發關於冪運算的題目吧ou 快速冪模板及對其的理解
下面先貼上學長教的快速冪模板 typedef long long ll ll qpow ll a,ll b,ll mod a a a mod b 1 return ans 那麼這個快速冪是如何實現的呢?原理就是將a b拆分掉,拆分成若干部分,每一部分a的指數都是2的n次方的格式,下面是乙個例子 就像...
初學 快速冪 的理解
部落格停了差不多三個月,雖然這一段時間在學演算法,但從來沒有寫部落格。今天看了一上午的快速冪,突然想寫寫部落格,增加一下自己的記憶!這個博文知識簡單介紹一下演算法中取餘的原因 1至於快速冪的概念不詳細記錄了。當我們想求a的b次冪對c取余時,我們會直接想到用這個演算法 int ans 1 for i ...
快速冪的演算法理解
一直聽說過快速冪,一直沒有用過。這下稍微有了點空閒時間,做個筆記自己看看。求乙個數的n次冪常見的是n次迴圈。例如。double power double base,int exponent while exponent return flag?1 total total 複雜度是o n 快速冪演算法...