【发布时间】:2011-09-04 00:33:01
【问题描述】:
我正在尝试编写一个 C 程序,给定一个正整数 n (> 1) 检测是否存在数字 x 和 r 以便 n = x^r
这是我到目前为止所做的:
while (c>=d) {
double y = pow(sum, 1.0/d);
if (floor(y) == y) {
out = y;
break;
}
d++;
}
在上面的程序中,“c”是指数 (r) 的最大值,“d”将从等于 2 开始。Y 是要检查的值,变量“out”设置为输出以后的那个值。基本上,脚本所做的是检查 y 的平方根是否存在:如果不存在,他会尝试使用平方根,依此类推......当他找到它时,他将 y 的值存储在“out”中,这样: y = out^d
我的问题是,有没有更有效的方法来找到这些值?我在网上找到了一些文档,但这比我的高中代数要复杂得多。如何以更有效的方式实现这一点?
谢谢!
【问题讨论】:
-
我想你的意思是 n = x^r,对吧?
-
使用浮点数对于找到完美的东西来说是个坏主意......
-
我会担心得到一个“小”
y:floor(16.9999999999999999987643254532423) != 17 -
特别是这里使用
floor肯定是错误的。 -
有趣!谢谢!但是,那我该如何解决呢?我使用它是因为这是我想出的唯一解决方案......
标签: c performance algebra computation