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
By Melody
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.
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}$