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

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

0 bình luận về “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”

  1. 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);

    Bình luận
  2. 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;

    Bình luận

Viết một bình luận