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

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

0 bình luận về “Viết phương trình đếm ước của số nguyên n”

  1. #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()

    {

    Bình luận
  2. 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)

    Bình luận

Viết một bình luận