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

หาช่วงจำนวนคอมโพสิต (Composite Numbers) ความยาว N ใน C++

หาช่วงของจำนวนเต็มบวกที่ทุกตัวเป็น Composite (มีตัวหารนอกจาก 1 และตัวมันเอง) และมีความยาวเท่ากับ N

แนวคิดทางคณิตศาสตร์

พิจารณา n! (แฟกทอเรียล) จะมีตัวหาร 2, 3, 4, ..., n

ดังนั้น n! + 2, n! + 3, ..., n! + n ล้วนเป็น Composite

ช่วงที่ต้องการ: [n! + 2, n! + n] (ความยาว = n - 1)

สำหรับความยาว N ใช้ (N+1)! + 2 ถึง (N+1)! + N + 1

ตัวอย่างโค้ด

#include <iostream>
using namespace std;

long long fact(int n) {
    if (n == 0) return 1;
    return n * fact(n - 1);
}

void showRange(int n) {
    long long a = fact(n + 1) + 2;
    long long b = a + n - 1;
    cout << "[" << a << ", " << b << "]";
}

int main() {
    int n = 3;
    showRange(n); // Output: [26, 28] → 26, 27, 28 ล้วนเป็น Composite
    return 0;
}

ผลลัพธ์

[26, 28]

การตรวจสอบ

  • 26 = 2 × 13 (Composite)
  • 27 = 3 × 9 (Composite)
  • 28 = 4 × 7 (Composite)

หมายเหตุ

โค้ดต้นฉบับใช้ fact(n + 2) + 2 ซึ่งให้ช่วง [122, 124] สำหรับ n=3 (ความยาว 3) แต่จริงๆ แล้ว fact(4)+2 = 26 ถึง 28 ก็ได้ความยาว 3 เช่นกัน ใช้ fact(n+1) ก็เพียงพอและค่าน้อยกว่า