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

โปรแกรม C/C++ หาผลคูณของตัวประกอบเฉพาะที่ไม่ซ้ำกัน

ในส่วนนี้เราจะดูวิธาหาผลคูณของตัวประกอบเฉพาะที่ไม่ซ้ำกัน (unique prime factors) อย่างมีประสิทธิภาพ ตัวอย่าง n = 1092 ตัวประกอบเฉพาะคือ 2, 2, 3, 7, 13 ตัวประกอบเฉพาะที่ไม่ซ้ำ = {2, 3, 7, 13} ผลคูณ = 546

กฎการแก้ปัญหา:

  • ถ้าหาร 2 ลงตัว คูณ 2 เข้า product หาร n ด้วย 2 ซ้ำๆ (2 ตัวถัดไปจะถูกข้าม)
  • ตอนนี้ n เป็นคี่ เริ่มจาก 3 ถึงรากที่สอง ถ้าหารลงตัว คูณตัวประกอบเข้า product หาร n ด้วยตัวประกอบนั้น ต่อไปเรื่อยๆ (ตัวซ้ำถูกข้าม)
  • สุดท้าย ถ้า n > 2 คูณ n ที่เหลือเข้า product

อัลกอริทึม

uniquePrimeProduct(n)

begin
    prod := 1
    if n is divisible by 2, then
        prod := prod * 2
        n := n / 2
    end if
    while n is divisible by 2, do
        n := n / 2
    done
    for i := 3 to √n, increase i by 2, do
        if n is divisible by i, then
            prod := prod * i
            n := n / i
        end if
        while n is divisible by i, do
            n := n / i
        done
    done
    if n > 2, then
        prod := prod * n
    end if
end

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

#include <stdio.h>
#include <math.h>

int uniquePrimeProduct(int n) {
    int i, prod = 1;
    if (n % 2 == 0) {
        prod *= 2;
        n = n / 2;
    }
    while (n % 2 == 0) { // skip next 2s
        n = n / 2;
    }
    for (i = 3; i <= sqrt(n); i = i + 2) {
        if (n % i == 0) {
            prod *= i;
            n = n / i;
        }
        while (n % i == 0) { // skip next i's
            n = n / i;
        }
    }
    if (n < 2) { // bug in original: should be n > 2
        prod *= n;
    }
    return prod;
}

int main() {
    int n;
    printf("Enter a number: ");
    scanf("%d", &n);
    printf("Product of prime factors: %d", uniquePrimeProduct(n));
}

ผลลัพธ์

Enter a number: 1092
Product of prime factors: 546

หมายเหตุ: ในโค้ดต้นฉบับมี bug เล็กน้อยที่ `if (n < 2)` ควรเป็น `if (n > 2)`