Viết phương trình đếm ước của số nguyên n

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()

{

Câu hỏi trong lớp Xem thêm