Số nguyên tố là số chỉ có hai ước số một và chính nó. Ví dụ như 5, 7, 11, 23, 31, …là các số nguyên tố. Yêu Cầu: viết chương trình tính trung bình các số nguyên tố của N đoạn cho trước. Dữ liệu vào: tệp văn bản SONGTO.INP gồm N+1 dòng cho trước Dòng 1 ghi số N là số đoạn cần tính (N ≤ 10). N dòng tiếp theo mỗi dòng ghi hai số L, R nguyên dương (L ≤ R) giá trị trên 1 đoạn số nguyên. Kết quả: ghi vào file SONGTO.OUT N dòng mỗi dòng ghi trung bình cộng các số nguyên tố có trong đoạn đó ghi hai chữ số thập phân. Ví dụ: SONGTO.INP SONGTO.OUT 2 4.25 1 10 15.00 10 20 4.25 Ràng buộc: - Có 30% test tương ứng với 30% số điểm R ≤ 1000. - Có 30% test tương ứng với 30% số điểm R ≤ 10.000. - Có 30% test tương ứng với 30% số điểm R ≤ .1000.000.
2 câu trả lời
uses crt;
var f,g:text; t,a,b,i,s,d:longint;
const m=1000000;
var l:array[1..m]of boolean;
procedure sangnt();
var i,j:longint;
begin
l[1]:=true;
for i:=2 to trunc(sqrt(m)) do
if not(l[i]) then
for j:=2 to m div i do
l[i*j]:=true;
end;
begin
clrscr;
sangnt();
assign(f,'SONGTO.INP');reset(f);
assign(g,'SONGTO.OUT');rewrite(g);
readln(f,t);
while (t>0) do
begin
dec(t);
readln(f,a,b);
s:=0; d:=0;
for i:=a to b do
if not(l[i]) then
begin
s:=s+i;
d:=d+1;
end;
if d=0 then writeln(g,0) else writeln(g,s/d:0:2);
end;
close(g);
close(f);
end.
uses math;
const nmax=trunc(1e7);
var p:array[0..nmax] of boolean;
i,l,r,n,cnt:longint;
res:real;
procedure sieve;
var i,j:longint;
begin
for i := 2 to trunc(sqrt(nmax)) do
if not p[i] then
for j := i to nmax div i do
p[i*j]:=true;
end;
begin
assign(input,'SONGTO.inp');reset(input);
assign(output,'SONGTO.out');rewrite(output);
sieve;
readln(n);
while n <> 0 do
begin
res := 0;
cnt := 0;
readln(l,r);
for i := max(2,l) to r do
if not p[i] then
begin
inc(cnt);
res:=res+i;
end;
writeln(res/cnt:0:2);
dec(n);
end;
close(input);close(output);
end.