#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
//算法库
/*binary_search()二分搜索
sort()快排
min_element()查找最小值
max_element()查找最大值
reverse()反转*/
//string库
/*to_string() 数值转string
stod() stoi() 等等 string转数值
substr()*/
//时间复杂度:O(logn)
int binarySearch(vector<int>& vec, int target) {//二分查找循环版本
int l = 0, r = vec.size() - 1;
while (l <= r) {
int mid = (l + r) / 2;
if (vec[mid] == target) {
return mid;
}
else if (vec[mid] < target) {
l = mid + 1;
}
else r = mid - 1;
}
return -1;
}
int binarySearch1(vector<int>& vec, int l, int r, int target) {//二分查找递归版本
if (l > r) return -1;
int mid = (l + r) / 2;
if (vec[mid] == target) return mid;
else if (vec[mid] > target) return binarySearch1(vec, l, mid - 1, target);
else return binarySearch1(vec, mid + 1, r, target);
}
//倍增法求快速幂
typedef long long ll;
ll Quick_pow(int base, int m) {
//相当于树反过来,时间复杂度也是树的高度O(logn),在这里是O(logm)
ll rlt=1;
while (m) {
if ((m & 1) == 1) rlt *= base;//或者if(m % 2 == 1)
base = base * base;
m >>= 1;
}
return rlt;
}
int main() {
//vector<int> vec{ 1,2,3,4,5 };
//int tar;
//while (cin >> tar) {
// cout << binarySearch(vec, tar) << endl;
// cout << binarySearch1(vec, 0,vec.size()-1, tar) << endl;
//}
int base, m;
while (cin >> base >> m) {
cout << Quick_pow(base, m) << endl;
}
return 0;
system("pause");
}
二分查找-循环和递归版本,倍增求快速幂,以及常用算法库和string库
最新推荐文章于 2024-05-01 08:23:28 发布