Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การแสดงตัวเลขเป็นกำลังและผลคูณของจำนวนเฉพาะใน JavaScript

ปัญหา

เราต้องเขียนฟังก์ชัน 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