快速冪(二分法,位運算)

2021-10-03 19:39:14 字數 892 閱讀 3509

想弄清本題演算法,需要先了解取模(求餘)運算的一些性質,比如:

遞迴的思想就是利用二分法。它基於如下事實:

(1)如果p是奇數,那麼有bp=b*bp-1

(2)如果p是偶數,那麼有bp=bp/2*bp/2

且臨界值b0=1.

注意:不能直接寫成return binarypow(b,p/2,k)*binarypow(b,p/2,k)%k;,這樣的話時間複雜度為o(2logp)=o( p )。

#include

typedef

long

long ll;

using

namespace std;

ll binarypow

(ll b,ll p,ll k)

intmain()

如果把p寫成二進位制,那麼b就可以寫成若干二次冪之和,例如13的二進位制是1101,於是13=23+22+20=8+4+1,所以b13=a8*a4*a1.

類似的,對於任意ab,它可以表示為a2k,…,a4,a2,a1中若干項的成績。其中,若b的二進位制i號位為1,則a2i就被選中。

#include

typedef

long

long ll;

using

namespace std;

intmain()

b=b*b%k;

p>>=1;

}printf

("%lld"

,ans%k)

;return0;

}

二分法快速排序

我在實現二分法快速排序的時候,最初的程式是這樣的。include using namespace std void qsort int arr,int left,int right while l r arr l value l if arr l value while l r arr l valu...

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...

python二分法查詢 Python 二分法查詢

二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...