寻找最大值任何给定数量的功率值小于另一个给定数量

时间:2012-11-07 15:20:34

标签: c++ algorithm

对于给定值'a'和'y',如何找到max x值,使得x = a ^ b< y表示b∈N且a> 0。 例如,y = 14且a = 2,则x必须为8.换句话说,对于[8.15]中y的所有值,x必须为8。 同样,对于[9,26]中y的所有值,x必须为9.

2 个答案:

答案 0 :(得分:2)

您可以使用基数为a的日志。 <cmath>中不存在这样的函数,但如果你还记得

的公式
log (base a, c) = log (base e, c) / log (base e, a)

你可以使用cmath的log(自然对数)函数来完成它。

int exponent = log(y)/log(a); //truncates to the floor, just what we need.
int answer = a to the power of exponent

答案 1 :(得分:0)

相当明显的算法化任务...取基数的整数部分 - y的logaritm并将a提升到该幂:

#include <cmath>

int exponent = (int)(log(y) / log(a)); // base-a logarithm of y, truncated to a whole number
int x = (int)pow(a, exponent); // a raised to that power