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.

Câu hỏi trong lớp Xem thêm