Đăng ngày: 16:41 23-10-2009
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!
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?