【发布时间】:2020-09-19 15:02:14
【问题描述】:
创建以下程序来计算数字的完美幂
最终结果是让 Perfect Power 在不到 0.01 秒的执行时间内完成所有测试用例。
目前,10,000 的程序最终结果时间性能约为 2 秒以上,而 1073741824 的时间性能要长得多。需要帮助以帮助将所有完美能力的时间缩短到 0.01 秒或更短。
下面是程序代码:
/**
*
* A utlity class to calculate the perfect power of an integer
*/
public class PerfectPower {
public static void main(String[] args) {
new TimeExec(new Runnable() {
public void run() {
System.out.println("Perfect Power of 17 is " + getPerfectPower(17));
}
}, "Get Perfect Power of 17", System.out).start();
new TimeExec(new Runnable() {
public void run() {
System.out.println("Perfect Power of 625 is " + getPerfectPower(625));
}
}, "Get Perfect Power of 625", System.out).start();
new TimeExec(new Runnable() {
public void run() {
System.out.println("Perfect Power of 1024 is " + getPerfectPower(1024));
}
}, "Get Perfect Power of 1024", System.out).start();
new TimeExec(new Runnable() {
public void run() {
System.out.println("Perfect Power of 10000 is " + getPerfectPower(10000));
}
}, "Get Perfect Power of 10000", System.out).start();
new TimeExec(new Runnable() {
public void run() {
System.out.println("Perfect Power of 1073741824 is " + getPerfectPower(1073741824));
}
}, "Get Perfect Power of 1073741824", System.out).start();
}
/**
* Get the perfect power for a number.
* @param x number for which to calculate the perfect power.
*/
public static int getPerfectPower(int x) {
int largestP = 1;
for (int b = 1; b < x; b++) {
for (int p = 1; p < x; p++) {
if (Math.pow(b,p) == x) {
largestP = p;
}
}
}
return largestP;
}
}
结束代码:
17 的完美幂是 1 TimeExec:获得 17 的完美幂:0.001s
625 的完美幂是 2 TimeExec:获得 625 的完美功率:0.026s
1024 的完美幂是 2 TimeExec:获得 1024 的完美幂:0.052s
10000 的完美幂是 2 TimeExec:获得 10000 的完美幂:1.9s
需要此代码在 .01s 下打印 1073741824 的完美幂是 X TimeExec:获得完美的力量:XX.XXXs
【问题讨论】:
-
您的计算机需要 2+ 秒才能完成 10000?
-
很像 1.9-2.0 秒,所以是的。我修复了帖子,因此它显示了输出代码。
-
这与我要使用的代码不匹配,但无论如何谢谢。
-
只需在 getPerfectPower 中添加一个 if 语句来检查
Math.pow(b,p) > x是否存在,如果是,则中断内部循环。将显着提高您的运行时间。如果这还不够,请注意b需要一直运行到sqrt(x),然后您可以确定输出为 1。
标签: java algorithm performance timing