【发布时间】:2018-09-01 06:03:07
【问题描述】:
如果 x 可以表示为另一个数 b^p,我们说 p 是一个数 x 的完美 p 次方。
即如果 x=b^p ,则 p 是 x 的完美 p 次方。
我很少有 x 可以是正整数、负整数甚至分数的用例。前两种情况在 java 中可以很容易地处理,但是当 x 是分数时,如何使用 java 找出数字 x 的完美 p 次方。如果 x 是分数,我们可以简单地使用 Math.sqrt(x) 并得到一个使 b^2 =x 的数字 b,这不是真的吗?那么 2 将是 x 的完美 pth 次方。这个案子还有效吗?
我不一定要寻找代码,而是如果 x 是分数,则确定 java 中 x 的完美 pth 幂的逻辑。如果有人认为此案无效,也请说明您的理由。
下面是我编写的用于处理 x 是正整数或 0 到 1 之间的数字的情况的代码。但是我们是否可以处理 x 是的情况,例如。 45.487,875515.54884等?
public class PerfectPower {
public PerfectPower() {
}
public Integer getPerfectPower(double x){
// x=b^p
int p = 0;
double b;
if(x==0){
throw new IllegalArgumentException("Cannot accept number 0.");
}
if (x > 1) {
for (b = 2; b <= x; b++) {
double value = 0;
p = 1;
while (value <= x) {
value = Math.pow(b, p);
if (value == x) {
return p;
} else if (value > x) {
break;
} else {
p++;
}
}
}
} else if(x>0 && x<1){
for (b = 2; (1/b) >= x; b++) {
double value = 1;
p = -1;
while (value >= x) {
value = Math.pow(b, p);
if (value == x) {
return p;
} else if (value < x) {
break;
} else {
p--;
}
}
}
}
return null;
}
【问题讨论】:
-
这不是stackoverflow的问题,因为它是写的。通过添加一些代码将其变成一个编码问题,否则您将继续看到反对票。
-
添加了支持问题的代码。
-
我不明白。如果只给出 x,你不能设置 b = x 和 p = 1 吗?或者如果 b != x 是必需的,那么 b = sqrt(x) 和 p = 2?
-
我的场景是任何随机数 x 都可以传递给程序。如果通过了 81,则 b^p = 81 的最小数字 b 和 p 将是 b=3 和 p=4。所以 81 的完美幂是 4。同样对于 16,p=4 等于 2^4=16。
-
@anonymous 到底是什么问题?您可以计算
x的第n 个根并再次通过n对其进行供电(这将是您的p)。