2 câu trả lời
Cách giải 1: Sử dụng một biến chạy từ 1 tới N và 1 biến đếm sẽ tăng lên 1 đơn vị nếu có số i để N chia hết i (Cơ bản, dễ)
uses crt;
var N, i, dem: integer;
Begin
clrscr;
write('Nhap so nguyen n: '); readln(N);
dem:=0;
for i:=1 to N do if N mod i = 0 then dem:=dem+1;
writeln('So uoc so cua ', N, ' la: ', dem:2);
readln;
End.
Cách giải 2: Sử dụng một biến chạy từ 1 tới $\sqrt[]{N}$ và 1 biến đếm sẽ tăng lên nếu có số i để N chia hết i (Cụ thể: biến đếm tăng lên 2 nếu đó không là giá trị chính xác của $\sqrt[]{N}$, tăng lên 1 nếu đó là giá trị chính xác của $\sqrt[]{N}$) (Nâng cao, khó)
uses crt;
var N, i, dem: integer;
Begin
clrscr;
write('Nhap so nguyen n: '); readln(N);
dem:=0;
for i:=1 to sqrt(N) do
(*sqrt(N) la lay can bac 2 cua n*)
if N mod i = 0 then
if i=sqrt(N) then dem:=dem+1 else dem:=dem+2;
writeln('So uoc so cua ', N, ' la: ', dem:2);
readln;
End.
(Cách 2 chạy nhanh hơn nhưng khó hiểu hơn. Nếu đây là BT trên trường, theo mình, nên làm cách 1 là vửa đủ khả năng hiêu, vừa đủ điểm theo kiến thức trên trường)
#include <iostream>
using namespace std;
// Đếm số lượng “ước số” của số nguyên dương n
// VD :
// 5 = 1 5 ==> dem = 2
// 10 = 1 2 5 10 ==> dem = 4
int Dem_UocSo(int N)
{
int dem = 0;
for (int i = 1; i <= N; i++)
{
if (N % i == 0)
dem++;
}
return dem;
}
int main()
{