Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Tích các ước số nguyên tố duy nhất của một số trong Python


Trong bài viết này, chúng ta sẽ học về giải pháp cho bài toán cho trước:

Đề bài

Cho một số n, chúng ta cần tìm tích của tất cả các ước số nguyên tố duy nhất của nó và trả về kết quả.

Ví dụ

Input: num = 11
Output: Product is 11

Giải thích

Ở đây, số đầu vào là 11 chỉ có 1 ước số nguyên tố là 11. Và do đó tích của chúng là 11.

Cách 1

Sử dụng vòng lặp for từ i = 2 đến n+1 kiểm tra xem i có phải là ước của n và sau đó kiểm tra xem i có phải là số nguyên tố, nếu có thì lưu tích vào biến product và tiếp tục quá trình cho đến khi i = n.

Ví dụ

def productPrimeFactors(n):
    product = 1
    for i in range(2, n+1):
        if (n % i == 0):
            isPrime = 1
            for j in range(2, int(i/2 + 1)):
                if (i % j == 0):
                    isPrime = 0
                    break
            if (isPrime):
                product = product * i
    return product
# main
n = 18
print(productPrimeFactors(n))

Kết quả

120

Phạm vi của tất cả biến được hiển thị trong hình dưới đây:

Tích các ước số nguyên tố duy nhất của một số trong Python

Cách 2 (Hiệu quả hơn)

1) Khi n chia hết cho 2 (chẵn), in 2 và chia n cho 2.

2) Sau bước 1, n phải trở thành lẻ. Bây giờ bắt đầu vòng lặp for từ i = 3 đến căn bậc hai của n. Khi i chia hết n, in i và chia n cho i. Sau khi i không còn chia hết n, tăng i lên 2 và tiếp tục.

3) Nếu n là số nguyên tố và lớn hơn 2, thì n sẽ không trở thành 1 bằng hai bước trên. Do đó in n nếu nó lớn hơn 2.

Ví dụ

import math
def productPrimeFactors(n):
    product = 1
    # ước nguyên tố 2
    if (n % 2 == 0):
        product *= 2
        while (n % 2 == 0):
            n = n / 2
    # n phải là lẻ
    for i in range(3, int(math.sqrt(n)) + 1, 2):
        # Khi i chia hết n, in i và chia n
        if (n % i == 0):
            product = product * i
            while (n % i == 0):
                n = n / i
    # n là số nguyên tố lớn hơn 2
    if (n > 2):
        product = product * n
    return product
# main()
n = 8
print(int(productPrimeFactors(n)))

Kết quả

2

Phạm vi của các biến được đề cập trong hình dưới đây:

Tích các ước số nguyên tố duy nhất của một số trong Python

Kết luận

Trong bài viết này, chúng ta đã học về tích các ước số nguyên tố duy nhất của một số cho trước với cách tiếp cận brute force và cách tiếp cận hiệu quả.