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ộ 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 Java Project trong Eclipse IDE và đặt tên là JavaAlgorithmSecondProject.
Chúng ta tiếp tục tạo package main và class Main.java cùng phương thức main() mặc định.

Bước 2.
Chúng ta tạo package algorithm và class UocBoi.java.

Bước 3.
Chúng ta thực hiện giải thuật bằng ngôn ngữ Java 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ữ Java như sau:

Bước 2.
Chúng ta thực hiện thử nghiệm phương thức tinhUCLN() và tinhBCNN() trong class Main.java 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ữ Java 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
Mapcủa Java để lưu trữ tập hợp không giới hạn các phần tử theo từng cặp<từ_khóa, giá_trị>. Mỗi phần tử là một cặp:từ_khóalà thừa số nguyên tố;giá_trịlà số mũ tương ứng với thừa số nguyên tố này.
- Do thừa số nguyên tố và số mũ đều là số nguyên, chúng ta định nghĩa kiểu dữ liệu tập hợp là
Map<Integer, Integer>.
Bước 2.
Chúng ta thực hiện thử nghiệm phương thức phanTichTSNT() trong class Main.java như sau:

Những kỹ thuật lập trình cần chú ý:
- Chúng ta sử dụng lớp thư viện
StringBuilderđể xử lý một số tác vụ liên quan đến chuỗi.
- Phương thức
append()củaStringBuilderthực hiện nối một chuỗi mới vào chuỗi hiện có.
- Phương thức
keySet()củaMap<>trả về một danh sách kiểuSet<>của Java, lưu trữ các phần tử là từ khóa trongMap.
- Phương thức
get()củaMapcó đặc điểm: tham số là từ khóa; trả về kết quả là giá trị tương ứng.
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ữ Java 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ữ Java như sau:

Bước 2.
Chúng ta thực hiện thử nghiệm phương thức tinhSoUocSo() và tinhTongUocSo() trong class Main.java 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ữ Java.
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.