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

การหา Additive Persistence ของตัวเลขใน JavaScript

ภาพรวม

Additive Persistence คือจำนวนครั้งที่ต้องนำตัวเลขแต่ละหลักมาบวกกันซ้ำๆ จนได้ตัวเลข 1 หลัก (Single Digit)

ตัวอย่าง

1679583
1+6+7+9+5+8+3 = 39  (1 ครั้ง)
3+9 = 12           (2 ครั้ง)
1+2 = 3            (3 ครั้ง)
Additive Persistence = 3

การนำไปใช้

const sumDigit = (num, sum = 0) => {
  if (num) {
    return sumDigit(Math.floor(num / 10), sum + num % 10);
  }
  return sum;
};

const persistence = (num) => {
  num = Math.abs(num);
  let res = 0;
  while (num > 9) {
    num = sumDigit(num);
    res++;
  }
  return res;
};

console.log(persistence(1679583)); // 3

ผลลัพธ์

3

วิธีการทันสมัย

const persistenceModern = (num) => {
  let count = 0;
  num = Math.abs(num);
  while (num > 9) {
    num = [...String(num)].reduce((s, d) => s + Number(d), 0);
    count++;
  }
  return count;
};

ความสนใจทางคณิตศาสตร์

  • Additive Persistence สูงสุดที่รู้จักในฐาน 10 คือ 11 (สำหรับตัวเลข 277777788888899)
  • Multiplicative Persistence: คูณแทนบวก (Max known = 11)
  • Digital Root: ผลลัพธ์สุดท้าย (Single Digit) เรียกว่า Digital Root

Digital Root (สูตรทางคณิตศาสตร์ O(1))

const digitalRoot = (num) => {
  if (num === 0) return 0;
  return 1 + (num - 1) % 9;
};

// ทดสอบ
console.log(digitalRoot(1679583)); // 3
console.log(digitalRoot(39));      // 3
console.log(digitalRoot(12));      // 3

การประยุกต์ใช้

  • Number Theory Research
  • Checksum Algorithms (ISBN, Credit Card)
  • Recreational Mathematics
  • Teaching Recursion/Iteration Concepts

ข้อควรระวัง

  • Recursive sumDigit อาจ Stack Overflow กับตัวเลขใหญ่มาก
  • JavaScript Number Precision: ปลอดภัยถึง 2⁵³-1 (15-16 digits)
  • BigInt: ใช้สำหรับตัวเลขใหญ่กว่านั้น