Điểm:
100
Thời gian:
1.0s
Bộ nhớ:
640M
Input:
bàn phím
Output:
màn hình
Viết chương trình nhập vào số nguyên \(n\) (\(n\leq 10^7\)). In ra số lượng ước số của \(n\). (Ước số của \(n\) là các số nguyên mà \(n\) chia hết)
Ví dụ: \(n=10\) thì \(4\) ước số: \(1\) \(2\) \(5\) \(10\)
Input
- Một số nguyên dương \(n\).
Output
- In ra số lượng ước số của \(n\).
Example
Test 1
Input
10
Output
4
Test 2
Input
36
Output
9
Bình luận
SOLUTION:
Bài này có 2 phương pháp giải
Cách 1:
Duyệt for từ 1 đến sqrt(n) (căn bậc 2), nếu số đó chia hết cho n (hay còn gọi là ước) của n thì +2, nhưng nếu n là một số chính phương thì khi duyệt đến căn bậc 2 của n, chúng ta chỉ +1.
Cách 2:
Phuơng pháp này chỉ áp dụng với số > 1
1: Phân tích n sang thừa số nguyên tố
2: lấy các số mủ của các thừa số nguyên tố +1
3: tính tích của dãy số vừa tìm được
vd : 20 = \(2^2\) * \(5^1\)
-dãy số mủ số sau khi +1 là (3; 2)
-tính tích = 3 * 2 = 6
Vậy kq=6
hãy kiểm chứng Ư(20) = {1; 2; 4; 5; 10; 20}, kq = 6
=> Dù n là 1 số nguyên tố thì cách này vẫn đúng!
.
Code tham khảo Accepted bằng ngôn ngữ C theo cách 2:
https://ideone.com/TDtNf2