Mọi người cho em hỏi ý tưởng như thế này có sai không ạ?
Cho N và dãy số a1,a2,…,aN. Hãy đếm các số nguyên tố trong dãy.
– Nhập N và dãy a(N)
– Ta lập một hàm xét xem một số nguyên N có phải là SNT không.
+ nếu N <= 1 thì hiển nhiên không phải
+ nếu N >= 2: ta xét số dư của N cho các số từ 2 đến phần nguyên của căn N
* nếu N chia hết cho bất kỳ số nào trong khoảng [2; phần nguyên căn N] thì N không là SNT, ngược lại N là SNT.
– Áp dụng hàm đó vào dãy a(N), cho biến dem <-- 0;
+ xét từ a[1] trở đi đến a[n], nếu a[i] là SNT thì dem <-- dem+1. Vòng lặp thực hiện đến khi i = N.
- Thông báo giá trị của dem hoặc không có snt trong dãy nếu dem = 0
Làm vậy đúng rồi đó bạn!
Mô phỏng code hàm kiểm tra nguyên tố:
Function nt(n:longint):boolean;
var i:longint;
begin
nt:=true;
if n<1 then nt:=false;
for i:=1 to trunc(sqrt(n)) do if n mod i=0 then nt:=false;
end;
Phần kiểm tra trong mảng:
for i:=1 to n do if nt(A[I]) then inc(dem);
writeln(Dem);
thế thì bạn cho cái hàm kiểu dữ liệu boolean luôn đi
nếu là snt thì true
nếu ko phải snt thì false
bạn tham khảo cách tạo hàm của mình nè:
Function kt(n:integer):boolean;
var i:integer;
begin
kt:=false;
for i:=2 to trunc(sqrt(n)) do
if n mod i=0 then exit;
if n<2 then exit;
kt:=true;
end;
rồi cho i chạy từ 1–>n kiểm tra nếu là snt thì cho biến đếm thêm 1 còn ko thì thôi
for i:=1 to n do
if snt(a[i])=true then dem:=dem+1;