Ước số (factor) của n là các số nguyên dương chia hết cho n. Duyệt từ 1 đến n, kiểm tra n % i == 0.
Mã nguồn
using System;
namespace Demo {
class ApplicationOne {
static void Main(string[] args) {
Console.Write("Nhập số: ");
int n = int.Parse(Console.ReadLine());
Console.WriteLine("Các ước số:");
for (int i = 1; i <= n; i++) {
if (n % i == 0) {
Console.WriteLine(i);
}
}
Console.ReadLine();
}
}
}
Kết quả (n = 12)
Nhập số: 12
Các ước số:
1
2
3
4
6
12
Tối ưu: Chỉ duyệt đến √n
Nếu i là ước thì n/i cũng là ước. Chỉ cần duyệt đến sqrt(n):
static void PrintFactorsOptimized(int n) {
var factors = new List();
for (int i = 1; i * i <= n; i++) {
if (n % i == 0) {
factors.Add(i);
if (i != n / i) factors.Add(n / i); // Tránh trùng khi i = sqrt(n)
}
}
factors.Sort();
foreach (int f in factors) Console.WriteLine(f);
}
So sánh độ phức tạp
| Phương pháp | Độ phức tạp | Lưu ý |
|---|---|---|
| Duyệt 1..n | O(n) | Đơn giản, chậm với n lớn |
| Duyệt 1..√n | O(√n) | Nhanh hơn nhiều, cần sort kết quả |
Lưu ý
- Xử lý input không hợp lệ (âm, 0, không phải số) bằng
int.TryParse. - Số 0 có vô hạn ước số — cần kiểm tra riêng.
- Số âm: ước số thường xét giá trị tuyệt đối.