Viết chương trình pascal, nhập n từ bàn phím đếm xem có bao nhiêu số chính phương từ 1 đến n, sử dụng câu lệnh while-do

Viết chương trình pascal, nhập n từ bàn phím đếm xem có bao nhiêu số chính phương từ 1 đến n, sử dụng câu lệnh while….do

0 bình luận về “Viết chương trình pascal, nhập n từ bàn phím đếm xem có bao nhiêu số chính phương từ 1 đến n, sử dụng câu lệnh while-do”

    • minhgiang68049
    • 27/12/2020

    uses crt;

    var n,i,dem:longint;

    begin

    clrscr;

    write(‘Nhap so nguyen duong n: ‘);readln(n);

    for i:=1 to n do  if sqrt(i)=trunc(sqrt(i)) then dem:=dem+1;

    writeln(‘Co ‘,dem,’ so chinh phuong’);

    readln

    end.

    Bình luận
  1. program so_chinh_phuong;

    uses crt;

    var n,i,d:integer;

    begin

           clrscr;

           write(‘Nhap n: ‘);  readln(n);

           i:=1; d:=0;

           while i<=n do

                  begin

                         if sqr(trunc(sqrt(i)))=i then d:=d+1;

                         i:=i+2*d+1;

                  end;

           write(‘Tu 1 den ‘,n,’ co ‘,d,’ so chinh phuong’);

           readln;

    end.

    *Lưu ý:

    i:=i+2*d+1;

    Có thể bạn sẽ thắc mắc chỗ này

    Dãy số chính phương cũng có quy luật:

    1 4 9 16 25 36 49 …

    i=1;  d=0;

    i=1 là số chính phương nên d=d+1=0+1=1, i=i+2*d+1=1+2*1+1=4

    i=4 là số chính phương nên d=d+1=1+1=2, i=i+2*d+1=4+2*2+1=9

    …..

    Như thế ta không cần chỉ tăng i thêm 1 đơn vị, nó sẽ nhanh hơn nhiều.

    Còn về sqr(trunc(sqrt(i)))=i 

    ví dụ i=4

    sqrt(4)=2;  trunc(2)=2;  sqr(2)=4=i ban đầu nên là số chính phương

    Ví dị i=6

    sqrt(6)=2.449….. ; trunc(2.449…)=2;   sqr(2)=4 khác i nên không phải số chính phương

    $\text{Dark Angles}$

           

    Bình luận

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