Đoạn code chương trình như sau:

from multiprocessing import Pool
import math

def isPrime(num):
    if num < 2:
        return False
    tg = int(math.sqrt(num))
    for i in range(2, tg + 1):
        if(num % i) == 0:
            return False
    return True

def showResult(num):
    if isPrime(num) == True:
        print('So: ' + str(num) + ' la so nguyen to')
#    else:
#       print('So: ' + str(num) + ' khong phai la so nguyen to')

if __name__ == '__main__':
    n = int(input('Nhap vao so nguyen duong n = '))
    if n <= 1:
        print('So nhap vao phai lon hon 1')
    else:  
        numbers = range(2, n + 1)#n = 20 => n + 1 = 21; range(2, 21) => {2,...,20}
        pool = Pool(processes=4)
        pool.map(showResult, numbers)

Trong đoạn code này, sẽ có 2 hàm:

  • isPrime(num): Kiểm tra xem số truyền vào có phải là số nguyên tố hay không.
  • showResult(num): Nếu số được truyền vào là số nguyên tố thì in ra màn hình.

Tại hàm main:

  • Yêu cầu nhập vào 1 số nguyên dương n bất kỳ thỏa mãn điều kiện n > 1.
  • Tạo ra 1 dãy số từ 2 đến n.
  • Khởi tạo Pool và truyền cho nó tham số processes = … (để hiểu rõ tham số này hãy xem phần tham khảo bên dưới nha).
  • Gọi pool.map(…) đưa vào hàm showResult và dãy số từ 2 đến n đã được tạo.

Lưu ý: Để sử dụng Pool thì ta cần import Pool vào chương trình như sau:

from multiprocessing import Pool

Ngoài ra cần import math vào để hàm isPrime(num) sử dụng như sau:

import math

Cách thức mà mình dùng để chạy song song trong bài toán này là Multiprocessing, các bạn có thể xem chi tiết tại phần tham khảo ở bên dưới.

Thực hiện chạy chương trình:

Tham khảo

Đọc thêm về multiprocessing tại đây: https://docs.python.org/3.7/library/multiprocessing.html

Lời kết

Cảm ơn các bạn đã xem bài viết này và hẹn gặp lại trong các bài viết tiếp theo. Nếu các bạn có vấn đề cần được giải đáp, hãy để lại bình luận cho mình nhé!

Được phân loại: