จำนวน Pronic (Pronic Number) คืออะไร?
จำนวนที่สามารถจัดเป็นรูปสี่เหลี่ยมผืนผ้าได้ (Pronic มาจาก希腊文 promekes = rectangular)
คือผลคูณของจำนวนเต็มติดกัน 2 ตัว: n = k × (k + 1)
ลำดับ Pronic Numbers
0, 2, 6, 12, 20, 30, 42, 56, 72, 90, 110, 132, 156, 182, 210, 240, 272, 306, 342, ...
สอดคล้องกับ: 0×1, 1×2, 2×3, 3×4, 4×5, 5×6, 6×7, 7×8, 8×9, 9×10, ...
วิธีตรวจสอบ
แก้สมการ k(k+1) = n → k² + k - n = 0
กuadratric formula: k = (-1 + √(1 + 4n)) / 2
ถ้า k เป็นจำนวนเต็ม → n เป็น Pronic
ตัวอย่างโค้ด C++
#include <iostream>
#include <cmath>
using namespace std;
bool isPronicNumber(int num) {
if (num < 0) return false;
// วิธี 1: ใช้ quadratic formula
int discriminant = 1 + 4 * num;
int sqrtDisc = (int)sqrt(discriminant);
if (sqrtDisc * sqrtDisc != discriminant) return false; // ไม่ใช่ perfect square
int k = (-1 + sqrtDisc) / 2;
return k * (k + 1) == num;
}
// วิธี 2: วนลูปตรวจสอบ (ช้ากว่าแต่อ่านง่าย)
bool isPronicSimple(int num) {
for (int i = 0; i <= (int)sqrt(num); i++) {
if (i * (i + 1) == num) return true;
}
return false;
}
int main() {
cout << "Pronic numbers up to 200: ";
for (int i = 0; i <= 200; i++) {
if (isPronicNumber(i))
cout << i << " ";
}
cout << endl;
// ทดสอบเฉพาะตัว
int test[] = {0, 2, 6, 12, 20, 30, 42, 56, 72, 90, 110, 132, 156, 182, 210, 7, 15, 50};
for (int n : test) {
cout << n << " is " << (isPronicNumber(n) ? "" : "not ") << "pronic" << endl;
}
return 0;
}
ผลลัพธ์
Pronic numbers up to 200: 0 2 6 12 20 30 42 56 72 90 110 132 156 182 0 is pronic 2 is pronic 6 is pronic 12 is pronic 20 is pronic 30 is pronic 42 is pronic 56 is pronic 72 is pronic 90 is pronic 110 is pronic 132 is pronic 156 is pronic 182 is pronic 210 is pronic 7 is not pronic 15 is not pronic 50 is not pronic
คุณสมบัติที่น่าสนใจ
- Pronic numbers ทุกตัวเป็นเลขคู่ (เพราะ k(k+1) หนึ่งในสองตัวคู่)
- ผลรวมของ reciprocals: Σ 1/(k(k+1)) = 1 (telescoping series)
- Pronic number = 2 × Triangular number (สามเหลี่ยม)