2017-09-04 5 views
1

숫자 "n"이 완벽한 힘인지 확인하려고합니다. 이 문제를 해결하기 위해 다음 코드를 만들었습니다.숫자가 완벽한 힘인지 계산 중 오류 메시지가 발생했습니다.

var isPP = function(n) { 
    console.log(n); 
    for (let base = 2; base < n; base++) { 

    //Change of base formula used to change natural log to log base "base" 
     let exp = Math.log(n)/Math.log(base); 

    //If "exp" variable is integer, return array containing base and exponent 
    if (Math.pow(base,exp) === n) { 
     return [base,exp]; 
    } 
    } 

    return null; 
} 

이 한 무작위 시험을 제외한 모든 시험 (:, 오류 메시지가 읽을 때 N = 14618 "비 완벽한 전력 14,618에 null이 아닌 반환"예)를 전달합니다. 랜덤 테스트에서 62383의 "n"을 제공하는 경우에도 동일한 결과가 발생합니다.

코드가이 마지막 테스트를 제외한 모든 테스트를 통과하는 이유가 확실하지 않습니다. 숫자가 JS에 비해 너무 큽니까?

+0

n = 9의 경우 실패합니다. – Isaac

답변

0

여기 코드는 n=9 실패, @Isaac 이전에 언급 한 바와 같이 내가 코드

var isPP = function(n){ 
    for (let base = 2; base <= n/2; base++) { //start at 2 
    for (let exp = 2; exp <= n/2; exp++) { 
     let current = Math.pow(base,exp); 
     if (current == n) 
     return [base, exp]; 
     if (current > n) 
     break; //break when found to create a 'best case' runtime 
    } 
    } 
    return null; 
} 

로했습니다 몇 가지 작은 변화이다. 14618은 완벽한 힘이 아니기 때문에 오류가 읽습니다. 62383과 동일합니다.