【发布时间】:2017-07-24 13:26:54
【问题描述】:
我正在做一个项目,该项目需要我找到最大的 n,使得 x^n
约束:
x>=1 & y>=1
使用我想到的第一种方法,当 x=12 和 y = 411^20000 时,我花了大约 5 秒找到 n,即,
int n=0;
int x=12;
int y=100;
int temp;
int answer;
while(1)
{
temp = pow(x,n);
if(temp>y)
{
answer = n-1;
return(0);
}
n++;
}
注意:不是实际代码。不想让 gmp 语法复杂化
有更快的算法吗? 完整代码: https://pastebin.com/J1vbmEbK
【问题讨论】:
-
好吧,即使你不想发布完整的代码,我们仍然需要算法。
-
一点改进是迭代乘法而不是计算每个幂
-
即使你发布伪代码,也请尽量使用像
exp这样的真实函数,而不是按位异或运算符。 -
我可能不明白你的问题的限制,但为什么不直接计算答案,
floor( log(y)/log(x) )?log(y)/log(x)是计算 log-base-x(y) 的方式,其中log只是自然对数(或任何方便的对数)。 -
顺便说一句,在您的伪代码中,
n是不变的。