ปัญหา
เราต้องเขียนฟังก์ชัน JavaScript ที่รับจำนวนเต็มบวก ฟังก์ชันควรแสดงตัวเลขนี้เป็นผลรวมของกำลังของจำนวนเฉพาะ
ดังนั้น สำหรับตัวเลข n ฟังก์ชันควรคืนค่าสตริงแบบนี้:
n = "(p1**n1)(p2**n2)...(pk**nk)"
โดยที่ p1, p2, p3..pk เป็นจำนวนเฉพาะ และ n1, n2,..nk เป็นกำลังที่ไม่ติดลบ และ a ** b หมายถึง a ยกกำลัง 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)
คำอธิบายเพิ่มเติม
86240 = 2⁵ × 5 × 7² × 11 โค้ดมีปัญหา: 1) isPrime ไม่ตรวจสอบ √n 2) count ใช้ for-in บน array (iterate keys ไม่ใช่ values) 3) `'%s**%s' % (x,arr[x])` ไม่ทำงานใน JS (เป็น Python syntax) ควรใช้ template literals