Vấn đề
Chúng ta cần viết một hàm JavaScript nhận vào một số nguyên dương. Hàm phải biểu diễn số này dưới dạng tổng của các lũy thừa của các số nguyên tố.
Do đó, với số n, hàm phải trả về chuỗi như sau:
n = "(p1**n1)(p2**n2)...(pk**nk)"
Trong đó p1, p2, p3..pk là các số nguyên tố và n1, n2,..nk là các lũy thừa không âm của chúng và a ** b nghĩa là a mũ b.
Ví dụ
Dưới đây là mã:
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));
Kết quả
(2**5)(5)(7**2)(11)