Tìm ước chung lớn nhất php

Đề bài

Viết chương trình PHP tìm ước số chung lớn nhất [USCLN] và bội số chung nhỏ nhất [BSCNN] của hai số nguyên dương a và b.


Định nghĩa

USCLN của 2 số nguyên dương a và b là một số k lớn nhất, sao cho a và b đều chia hết cho k.

BSCNN của 2 số nguyên dương a và b là một số h nhỏ nhất, sao cho h chia hết cho cả a và b.

Lời giải

Một phương pháp đơn giản đề tìm USCLN của a và b là duyệt từ số nhỏ hơn trong 2 số a và b cho đến 1, khi gặp số nào đó mà cả a và b đều chia hết cho nó thì đó chính là USCLN của a và b. Tuy vậy phương pháp này chưa phải là hiệu quả nhất.

Vào thế kỷ 3 TCN, nhà toán học Euclid [phiên âm tiếng Việt là Ơ-clit] đã phát minh ra một giải thuật tìm USCLN của hai số nguyên dương rất hiệu quả được gọi là giải thuật Euclid. Cụ thể về ý tưởng của bài toán, giả sử a lớn hơn b, khi đó việc tính UCSLN của a và b sẽ được đưa về bài toán tính USCLN của a mod b và b vì USCLN[a, b] = USCLN[a mod b, b].

Khi đã tìm được USCLN thì việc tìm BSCNN của hai số nguyên dương a và b khá đơn giản. Khi đó BSCNN[a, b] = [a * b] / UCSLN[a, b].

Ví dụ dưới đây sử dụng giải thuật Euclid để giải quyết bài toán tìm ước số chung lớn nhất [USCLN] và bội số chung nhỏ nhất [BSCNN] của hai số nguyên dương a và b.

File: uscln_bscnn.php

Kết quả:

USCLN của 15 và 40 là: 5
BSCNN của 15 và 40 là: 120

 Viết chương trình tìm ước số chung lớn nhất [UCLN] và bội số chung nhỏ nhất [BCNN] của hai số a và b.

Gợi ý:

  • Sử dụng giải thuật Euclid.

Code mẫu:

Xem ví dụ

Giới thiệu

Trong nội dung bài này, chúng ta cùng nhau tìm hiểu một số bài toán cơ bản về ước số và bội số:

  • Tìm ước số chung lớn nhất của hai số tự nhiên.
  • Tìm bội số chung nhỏ nhất của hai số tự nhiên.
  • Phân tích một số tự nhiên thành các thừa số nguyên tố.
  • Tính số lượng các ước số của một số tự nhiên.
  • Tính tổng các ước số của một số tự nhiên.

Ước số chung lớn nhất của hai số

Ý tưởng giải thuật

Ước số chung lớn nhất [USCLN] của 2 số được tính theo thuật toán Euclid:

UCLN [a, b] = UCLN [b, [a mod b]]

Bước 1.

Chúng ta tạo một PHP Project trong Eclipse IDE và đặt tên là PHPAlgorithmSecondProject.

Bước 2.

Chúng ta tạo folder algorithmclass UocBoi.php.

Bước 3.

Chúng ta thực hiện giải thuật bằng ngôn ngữ PHP như sau:

Bội số chung nhỏ nhất của hai số

Ý tưởng giải thuật

Bội số chung nhỏ nhất [BSCNN] của hai số được tính theo công thức:

Bước 1.

Chúng ta thực hiện giải thuật bằng ngôn ngữ PHP như sau:

Bước 2.

Chúng ta thực hiện thử nghiệm phương thức tinhUCLN[]tinhBCNN[] trong file index.php như sau:

Bước 3.

Chúng ta thực thi toàn bộ project để kiểm tra kết quả thử nghiệm:

Phân tích thừa số nguyên tố

Ý tưởng giải thuật

Chúng ta thực hiện chia số N cho các số nguyên tố trong đoạn [2; N].

  • Với mỗi số nguyên tố đó, đếm số lần mà số N chia hết.
  • Sau mỗi lần chia cho số i, số N của chúng ta sẽ giảm đi i lần.
  • Chúng ta dừng quá trình chia khi số chia lớn hơn N.

Bước 1.

Chúng ta thực hiện giải thuật bằng ngôn ngữ PHP như sau:

Những kỹ thuật lập trình cần chú ý:

  • Chúng ta sử dụng kiểu dữ liệu array của PHP để lưu trữ tập hợp không giới hạn các phần tử theo từng cặp . Mỗi phần tử là một cặp: từ_khóa là thừa số nguyên tố; giá_trị là số mũ tương ứng với thừa số nguyên tố này.
  • Để thêm / xóa / sửa phần tử trong array đóng vai trò là tham số của một phương thức, chúng ta xác định vị trí con trỏ bằng cách thêm & vào trước tham số này.

Bước 2.

Chúng ta thực hiện thử nghiệm phương thức phanTichTSNT[] trong file index.php như sau:

Những kỹ thuật lập trình cần chú ý:

  • Cách thức để duyệt từng phần tử trong array để lấy ra được cả từ_khóagiá_trị là: foreach [$arr as $từ_khóa => $giá_trị] {}.

Bước 3.

Chúng ta thực thi toàn bộ project để kiểm tra kết quả thử nghiệm:

Số các ước số của một số

Ý tưởng giải thuật

Giả sử N được phân tích thành thừa số nguyên tố như sau:

Số các ước số của N là

Bước 1.

Chúng ta thực hiện giải thuật bằng ngôn ngữ PHP như sau:

Tổng các ước số của một số

Ý tưởng giải thuật

Tổng các ước của N là

Bước 1.

Chúng ta thực hiện giải thuật bằng ngôn ngữ PHP như sau:

Bước 2.

Chúng ta thực hiện thử nghiệm phương thức tinhSoUocSo[]tinhTongUocSo[] trong file index.php như sau:

Bước 3.

Chúng ta thực thi toàn bộ project để kiểm tra kết quả thử nghiệm:

Tổng kết

Trong bài này, chúng ta đã cùng nhau tìm hiểu một số giải thuật cơ bản xung quanh ước số và bội số của một số tự nhiên và thực hiện bằng ngôn ngữ PHP.

Hy vọng rằng chúng ta có thể áp dụng phù hợp những kỹ thuật và chức năng này cho những bài tiếp theo.

Published August 22, 2019

Post navigation

Bài Viết Liên Quan

Chủ Đề