Chuyển đến nội dung chính

TÌM USCLN VÀ BSCNN CỦA SỐ A,B BẰNG PASCAL

·        Thuật toán tìm UCLN của 2 số nguyên dương:
Cho 2 số nguyên dương m, n. Tìm UCLN(m,n)
Học sinh thường dùng một trong 2 thuật toán
Thuật toán 1: Sử dụng phép trừ liên tục cho đến khi 2 số bằng nhau:
                     + Nhập m, n
                     + While m<>n do
                             If m>n then m:=m-n
                             Else n:=n-m;
                     +UCNN:=n;
           Thuật toán này chạy chậm: Ví dụ với  m=1000000000, n=1 phải chạy 1 tỷ phép toán.
Thuật toán 2: (Đối với HSG nên hướng các em sử dụng thuật toán này)
                    + Nhập m, n
                    + While n <> 0 do
                         Begin
                           r:= m mod n
                           m:=n;                                             
                           n:=r;
                       End;
                             +UCLN:=m
Với thuật toán này khi m=1000000000, n=1, chỉ mất vài phép toán để tính được UCLN(m,n).
  •  Thuật toán tìm UCLN của dãy số

Để tìm UCLN của dãy a1, a2,…,an, cần lập hàm:
 FUNCTION UCLN(a, b: longint): longint;

 Khi đó  + d:=a[1];
               + for i:=2 to n do  Begin b:=a[i]; d:=UCLN(d, b);End;

 ·        Thuật toán tìm BCNN của 2 số:
Ta có BCNN(m,n)= (m * n) div UCLN(m, n).
Ở đây học sinh thường mắc 2 sai lầm sau :
Sai lầm 1 : d :=UCLN(m, n) ;
                   BCNN :=m*n div d ;
               Đúng ra phải là :
               BCNN :=m * n (lưu tích m.n)
                d := UCLN(m, n) ;
              BCNN := BCNN div d
Sai lầm 2 : BCNN(m, n, k) = m*n*k div UCLN(m, n k)
  •    Để tìm BCNN của dãy số nguyên dương a1, a2, …,an (n>=2)

   BCNN:=a[1]; d:=a[1];
 For i:=2 to n do n do
   Begin
      b:=a[i];      
      BCNN:=BCNN*b;
      d:=UCLN(BCNN,b);
     BCNN:=BCNN div d ;

  End ;



- Hàm tìm USCLN;

function uscln(a,b:integer):integer;

begin

while a<>b do

begin

if a>b then a:=a-b else b:=b-a;

end;

uscln:=a;

end;



Nhận xét

Bài đăng phổ biến từ blog này

Tam giác số (Pascal)

TAM GIÁC SỐ  (Câu 4. Hội thi Tin Học Trẻ Phú Yên lần thứ XIX - năm 2016)                              7                          3       8                      8      1       0                   2     7        4       4                 4    5      2       6       5 Cho một tam giác gồm các số nguyên không âm (xem hình trên). Hãy viết chương trình tính tổng lớn nhất của các số nằm trên lộ trình từ đỉnh xuống: - Tại mỗi bước đi, lộ trình có thể đi xuống phía bên trái hoặc xuống phía bên phải. - Số hàng trong tam giác lớn hơn...

SỐ CHÍNH PHƯƠNG (PASCAL)

SỐ CHÍNH PHƯƠNG (PASCAL) Số chính phương là số  mà nó là căn bậc 2 của một số nguyên nào đó. ví dụ: 4,9,16,25,.... là các số chính phương;  có nhiều cách để xác định một số có phải là số có phải số chính phương hay không; cách đơn giản nhất  ta dùng lệnh if (sqr (round(sqrt(A))))=A then write('A la so chinh phuong')                                              else  write('A khong la so chinh phuong'); Ghi chú: sqrt : hàm tính căn bậc 2 sqr: hàm tính bình phương round: hàm làm tròn số - Cách khác' if frac(sqrt(A))=0 then  write('A la so chinh phuong')                                              else  write('A khong la so chinh phuong');

VÒNG LẶP KHÔNG XÁC ĐỊNH WHILE..DO; REPEAT .. UNTIL

VÒNG LẶP KHÔNG XÁC ĐỊNH  WHILE..DO; REPEAT .. UNTIL - Vòng lặp While..do While <điều kiện > Do  <câu lệnh>; Câu lệnh sau do được thực hiện khi điều kiện được thỏa mãn (điều kiện =true); vòng lặp kết thúc khi điều kiện không thỏa (điều kiện =false) - Vòng lặp Repeat .. until; Repeat <câu lệnh>; Until <điều kiện>; Lặp lại câu lệnh cho đến khi nào  thỏa mãn điều kiện  (điều kiện =true) thì dừng lại;  Bài tập: Nhập vào một số nguyên A thỏa mãn (0<A<100), Tính tổng các số nguyên từ 1 đến A (S=1+2+...+A). Vận dụng câu lệnh While .. do uses crt; var A,I:  Integer; S:longint; begin          a:=0;          while not ((a>0) and (a<100)) do          begin          write('Nhap gia tri cua A:'); read(A);           end;          s:=0...