具体原理:开平方
#include <iostream>
#include <vector>
using namespace std;
/**
@brief 辅助函数,二分法求n次幂
@param x 底数
@param n 指数
@return 结果
*/
int getPow(int x, int n) {
if (n == 1) {
return x;
} else if (n % 2) {
int t = getPow(x, n / 2);
return t * t * x;
} else {
int t = getPow(x, n / 2);
return t * t;
}
}
/**
* @brief 求一个数开n方的整数部分
* @param x 待开n次方数
* @param n 开n次
* @return 开方的整数部分
*/
int getRootInteger(int x, int n) {
for (int i = x; i >= 1; --i) {
if (getPow(i, n) <= x) {
return i;
}
}
return x;
}
/**
@brief 求组合数
@param n n个球
@param m 去m个球
@return n个球去m个球的取法
*/
int comb(int n, int m) {
if (m == 0) {
return 1;
} el