MPRIME1 - Sum of Primes

Tác giả: flashmt

Ngôn ngữ: Pascal

const max=11000;
var a:array[2..max] of byte;
    b:array[0..2000] of integer;
    d:array[1..max] of byte;
    n:integer;

procedure init;
var i,j,k:integer;
begin
     fillchar(a,sizeof(a),0);
     k:=trunc(sqrt(max));
     for i:=2 to k do
         if a[i]=0 then
         begin
              j:=i*i;
              while j<=max do
              begin
                   a[j]:=1;
                   j:=j+i;
              end;
         end;
     fillchar(b,sizeof(b),0);
     for i:=2 to max do
         if a[i]=0 then
         begin
              inc(b[0]);
              b[b[0]]:=i;
         end;
     fillchar(d,sizeof(d),0);
     for i:=1 to b[0] do
     begin
          k:=b[i];
          inc(d[k]);
          for j:=i+1 to b[0] do
          begin
               k:=k+b[j];
               if k<=max then inc(d[k])
               else break;
          end;
     end;
end;

begin
     init;
     readln(n);
     while n<>0 do
     begin
          writeln(d[n]);
          readln(n);
     end;
end.

Download