首页 > 代码库 > 09.怎么取一个完美次幂

09.怎么取一个完美次幂

一个完美的功率为正整数的分类:

在数学中,完美的电源是可被表示为另一个正整数的整数次幂的正整数。更正式地说,n是一个完美的功率,如果存在自然数m> 1,并且k> 1,使得米? = N。

你的任务是检查wheter一个给定的整数是一个完美的动力。如果它是一个完美的电源,返回一对mk具有m ? = N作为证明。否则返回NothingNilnullNone或者你的语言的等价物。

注:对于一个完美的动力,可能有几双。例如81 = 3^4 = 9^2,所以(3,4)(9,2)有效的解决方案。然而,测试照顾这一点,所以如果一个数字是一个完美的电源,返回任何一对证明了这一点。

例子

Test.describe("perfect powers", function(){
  Test.it("should work for some examples",function(){
    Test.assertSimilar(isPP(4), [2,2], "4 = 2^2");
    Test.assertSimilar(isPP(9), [3,2], "9 = 3^2");
    Test.assertEquals( isPP(5), null, "5 isn‘t a perfect number");
  });
});

题目如上,以下是查看到的答案(本人未完成):

function isPP(n) {
for (var m = 2; m * m <= n; m++)
for (var k = 2; Math.pow(m, k) <= n; k++)
if (Math.pow(m, k) == n) return [m, k];
return null;
}

这位同学使用双重遍历的方式将数据从小到大拆分。先得到用户相乘的数值,这个数值的平方一定是小于N(要求的数值),然后在下一层的便利将幂数的范围确定,使用Math.pow(m,k)确定最大值,然后进行判断即可。

 

09.怎么取一个完美次幂