chỉ cần chạy tới phần nguyên của n/2 là đủ
chỉ cần chạy tới phần nguyên của n/2 là đủ
trời ! pó tay các cao thủ thưa là chỉ cần chạy tới trunc(SQRT(n)) thui ạ
( nghĩ là phần nguyên của căn bậc 2 n)
mà dạo này box chán quá nhỉ, chẳng thấy các cao thủ đâu cả, cả mod cũng chẳng thấy online bao giờ, ko hiểu
sax các ông đang làm gì thế người ta hỏi là đếm số nguyên tố trong dãy chứ đâu phải là in ra,tôi nghĩ là nên sử dụng hàm ktnt(kiểm tra nguyên tố),rồi cho đếm số các số nguyên tố
[=========> Bổ sung bài viết <=========]
sr mọi người tôi post bài này trong phần tin học lớp 11 chả hiểu sao lại kéo cả topic ra ngoài chẳng hiểu gì cả
Được sửa bởi luong1100 lúc 17:56 ngày 19-01-2009 Reason: Bổ sung bài viết
bai dung vong lap while hay wa y tuong cung hay lam
một nhỏ hai chấm hay thật đấy chấm xuống dòng hai nhỏ hai chấm nhưng không tối ưu chấm xuống dòng ba nhỏ hai chấm thấy ý tưởng của tôi hay không chấm hỏi hết chấm
- lạc đề trầm trọg
- huy rảnh wá àh mà sao lại k tối ưu . Tui cũg làm theo ý tưởg đó nhưg dùg vòg repeat .. until
Code:var n,i,j,d:integer; a:array[1..100] of integer; begin write('nhap n:'); readln(n); for i:=1 to n do begin write('nhap a[',i,'] '); readln(a[i]); end; j:=1; for i:=1 to n do if a[i]>1 then begin repeat inc(j); until (a[i] mod j=0); if j=a[i] then inc(d); end; write('co ',d,' so ngto trog day'); readln; end.
ông huysun bị rảnh ?
của bạn hangvt :Code:function ngto(a:integer):boolean; var i: integer; begin ngto:=true; for i:= a div 2 downto 2 do if a mod i = 0 then begin ngto:= false break; end; end;
Code:begin write('nhap n:'); readln(n); for i:=1 to n do begin write('nhap a[',i,'] '); readln(a[i]); end; j:=1; for i:=1 to n do if a[i]>1 then begin repeat inc(j); until (a[i] mod j=0); if j=a[i] then inc(d); chỉ cần j>a[i] div 2 là dược end; cần gán j:=1 lại trước vòng lặp tiếp theo write('co ',d,' so ngto trog day'); readln; end.
ko tối ưu.
VD với số 169:
chương trình đó phải chia cho 1,2,3,4,5,6,7,8,9,10,11,12,13.
tui chỉ cần chia cho các số 2,3,5,7,11,13 thế thôi.
lưu các số nguyên tố nhỏ hơn n lại rồi chia n cho các số nguyên tố nhỏ hơn n.
wên gán j:=1 trog vòg lặp . Vậy cách nào tối ưu nhất ? Còn cách cổ điển này
Code:function ngto(n:integer):boolean; var i:integer; begin ngto:=false; if n<2 then exit; for i:=2 to trunc(sqrt(n)) do if n mod i=0 then exit; {nếu n chia hết cho i thì n không là nguyên tố => thoát luôn} if (i>=sqrt(n)) then ngto:=true; end;
Tui có bài này mời các bạn giải giúp
MỘt chiếc xe gây tai nạn sau đó bỏ trốn. Biết rằng biển số xe là một số nguyên tố có 3 chữ số và là một số đối xứng và khi chuyển số đó sang hệ nhị phân ta cũng được một số đối xứng. Là một nhà tin học em hãy giúp các nhà điều tra tìm ra chiếc xe gây tai nạn.
[=========> Bổ sung bài viết <=========]
Số nguyên tố là một số chỉ có 2 ước là 1 và chính nó;
Để làm bài trên ta có thể xây dựng 1 hàm kiểm tra tính nguyên tố của 1 số sau đó duyệt từng phần tử của mảng và kiểm tra xem nó có phải là số nguyên tố hay không nếu là nguyên tố thì ta tăng biến đếm lên 1
Progarm demnto;
uses crt;
var A: array[1..30] of integer;
n,i,d : integer;
{xây dựng hàm kiểm tra nguyên tố}
Function ktnt(u: integer): boolean;
var ok: boolean;
Begin
if u < 2 then ok := false
else Begin
ok:= true;
for i := 2 to trunc(sqrt(u)) do
if u mod i = 0 then
begin
ok := false;
break;
end;
ktnt := ok;
End;
{Main program}
Begin
write('nhap n='); readln(n);
for i := 1 to n do readln(a[i]);
{dem nguyên tố}
d:= 0 ;
for i := 1 to n do
if ktnt(A[i]) then d:= d + 1;
if d >0 then writeln('trong mang co ', d, 'so nguyen to')
else writeln('khong co so nguyen to nao trong day');
Readln
End.
Được sửa bởi nguyenvancung lúc 20:35 ngày 10-02-2009 Reason: Bổ sung bài viết
Bookmarks