二分查詢 二分區間 快速冪(二分冪)

2021-10-13 17:15:53 字數 1411 閱讀 6565

#include

#include

using

namespace std;

//二分查詢

//初始區間[0,n-1]

intbinarysearch

(int a,

int left,

int right,

int x)

else

}return-1

;}//二分 找出元素的區間左閉右開

//初始區間[0,n]

intlower_bound

(int a,

int left,

int right,

int x)

else

}return left;

}int

upper_bound

(int a,

int left,

int right,

int x)

else

}return left;

}//lower_bound和upper_bound都在尋找有序序列中第乙個滿足某條件的元素的位置

//模板 二分區間[left,right]

intsolve

(int left,

int right)

else

}return left;

}//二分區間(left,right]

int solve2 (

int left,

int right)

else

}return right;

}//快速冪/二分冪

//遞迴寫法

typedef

long

long ll;

ll binarypow

(ll a,ll b,ll m)

}//快速冪 迭**法

ll binarypow2

(ll a,ll b,ll m)

a = a*a;

b>>=1;

}return ans;

}int

main()

;//二分查詢

printf

("%d %d\n"

,binarysearch

(a,0

,n-1,6

),binarysearch

(a,0

,n-1,9

));//快速冪

printf

("%ld\n"

,binarypow(5

,4,100000))

;printf

("%ld\n"

,binarypow2(5

,4,100000))

;return0;

}

二分快速冪

在a,b為整數時,若 b很大,如 b 10 25 的時候,我們就要進行優化。如果b是偶數,則可以看作 a b a b 2 2 如果b是奇數,則 a b a b 1 2 2。則有兩種方法,一種遞迴 dfs 一種迴圈,遞迴如下 int dfs int a,int b,int mod int temp d...

二分快速冪

題目 ac include includeusing namespace std long long pow long long a,long long b,long long mod 二分快速冪 int main long long n,m cin n m long long mod 100000...

二分快速冪

對於a b,普通的求法是用乙個迴圈一直乘b個a,這樣的方法對於某些題目來說可能顯得比較慢。二分快速冪是一種利用b的二進位制特徵來快速求a b的演算法。例如 a 2,b 35 則b的二進位制表示形式為100011 則 a b 2 32 2 2 2 1 有了這樣的思路之後,就不用迴圈b次了。假設b的二進...