문제
양의 정수를 취하는 JavaScript 함수를 작성해야 합니다. 우리의 함수는 이 숫자를 소수의 거듭제곱의 합으로 나타내야 합니다.
따라서 숫자 n에 대해 함수는 다음과 같은 문자열을 반환해야 합니다. -
n = "(p1**n1)(p2**n2)...(pk**nk)"
여기서 p1, p2, p3..pk는 소수이고 n1, n2,..nk는 음이 아닌 거듭제곱이며 a ** b는 b의 거듭제곱을 나타냅니다.
예시
다음은 코드입니다 -
const isPrime = num => {
for(let i = 2; i < num; i++){
if(num % i === 0){
return false;
}
};
return num > 1;
}
const count = (arr = [], n = 1) => {
for(const k in arr){
if(n % k === 0){
arr[k] += 1;
return count(arr, n / k)
}
};
return arr;
};
const primeFactors = (n) => {
const res = [];
for(let i = 2; i < n; i++){
if(isPrime(i)){
res.push(i);
}
};
const arr = [];
for(const el in res){
arr[el] = 0;
};
count(arr,n);
let str = '';
for(const x in arr){
if(arr[x] > 1){
str += '(%s**%s)' %(x,arr[x])
}else if(arr[x] === 1){
str += '(%s)' % (x)
};
};
return str
};
console.log(primeFactors(86240)); 출력
(2**5)(5)(7**2)(11)