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

ตรวจสอบจำนวน Pronic ใน C++

จำนวน 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 (สามเหลี่ยม)