Chào bạn! Rất vui vì bạn đã vào thăm blog của tôi: -)

Bài mới nhất

Sửa Đóng
uses crt;
var n,k : longint; {Kieu so nguyen dai tu -2147483648 den 2147483647}
    ok  : boolean; {Kieu logic, co gia tri la FALSE hoac TRUE}
begin
  clrscr;
  writeln('Nhap so tu nhien n. Xet xem no co la so nguyen to khong!');
  repeat
    write('n=');
    readln(n);
    if n<10 then
      if n in [2,3,5,7] then writeln('La so nguyen to')
      else writeln('Khong la so nguyen to')
    else
      if n mod 2=0 then writeln('Khong la so nguyen to vi chia het cho ',2)
      else {Tu day n>10 va le}
        begin
          {Cach 1:}
          k:=3;
          while (n mod k>0) and (k<=sqrt(n)) do k:=k+2;
          if k>sqrt(n) then writeln('La so nguyen to')
          else writeln('Khong la so nguyen to vi chia het cho ',k);
          {Cach 2:}
          k:=1;
          repeat k:=k+2 until (n mod k=0) or (k>sqrt(n));
          if k>sqrt(n) then writeln('La so nguyen to')
          else writeln('Khong la so nguyen to vi chia het cho ',k);
          {Cach 3:}
          ok:=TRUE; {Cho menh de "la so nguyen to" la dung}
          for k:=3 to round(sqrt(n)) do
            if n mod k=0 then
              begin
                writeln('Khong la so nguyen to vi chia het cho ',k);
                ok:=FALSE;
                BREAK; {Thoat khoi vong lap khi phat hien thay su kien:
                        n chia het k lan dau tien. Neu khong co lenh nay
                        thi mac du thay n chia het cho k roi, lai tiep
                        tuc tang k len nua de xet xem n co chia het cho k
                        khong va se ton them thoi gian, nhat la cac so lon}
              end;
          if ok then writeln('La so nguyen to')
        end;
  until readkey=#27; {Lap toan than chuong trinh den khi go Esc}
end.

Chu y:

1.- Ta dung toan tu mod, nghia la lay phan du cua phep chia hai so
    nguyen.
    Vi du: 7 mod 3 = 1, tuc la 7 chia 3 du 1.
                n mod 2 = 0, tuc la n chia k du 0, hay n la so chan.
2.- Ham ROUND(r), nhan lay doi so la mot so thuc r, de tra lai gia tri la
    so nguyen lam tron cua r.
3.- Lenh BREAK la bat may thoat khoi vong lap gan nhat, khong tiep tuc
    vong lap moi nua. Cach 1 va 2 tu no thoat khoi vong lap khi gap
    truong hop n chia het cho k.
4.- Trong 3 cach, hay con goi la 3 thuat toan tren thi cach 1 va 2 la
    toi uu nhat, cach 3 khong toi uu vi phai xet ca khi k la so chan
    trong khi biet n la so le roi, khong bao gio chia het cho so chan ca!
5.- Cach 3 con nhuoc diem nua la: Moi lan xet deu phai tinh lai ham ROUND.
    Neu khong muon vay, thi phai khai bao them mot bien kieu longint nua,
    chang han dat ten la Moc. Doan ma nguon do nhu sau:
    Moc:=ROUND(n);
    for k:=3 to Moc do ...
6.- Biet thuat toan nay, ban co the lap trinh lai trong ngon ngu khac,
    chang han nhu: C, JavaScript, Delphi, VB,...
7.- Co ban se hoi: tai sao la chi xet den sqrt(n) thoi. Xin thua: Neu n chia het
    cho mot so a>sqrt(n) thi thuong cua no se la b<=sqrt(n) la mot
    so tu nhien trong khoang tu 3 den sqrt(n) da duoc xet roi...

    Chuc cac ban thanh cong!
  • Báo cáo

    tono 20:39 17-11-2009

    xin hoi

    muon viet chuong trinh tim cac so nguyen to tu 1-100 ma khong dung vong lap thi the nao?