MPRIME1 - Sum of Primes

Tác giả: khuc_tuan

Ngôn ngữ: Pascal

// {$APPTYPE CONSOLE}
 {$mode delphi}

const
    maxn = 11000;

var
  isPrime : array[0..maxn] of boolean;
  x, cur, nd, i, j : integer;
  ds : array[0..maxn] of integer;
  sum : array[0..maxn] of integer;

begin
    fillchar(isprime, sizeof(isprime), true);
    isprime[0] := false;
    isprime[1] := false;
    for i:=2 to maxn do if isprime[i] then
    begin
        inc(nd);
        ds[nd] := i;
        j := i + i;
        while j <= maxn do
        begin
            isprime[j] := false;
            j := j + i;
        end;
    end;
    sum[0] := 0;
    for i:=1 to nd do sum[i] := ds[i] + sum[i-1];

    while true do
    begin
        read(x);
        if x=0 then break;
        j := 0;
        cur := 0;
        for i:=1 to nd do
        begin
            if ds[i] > x then break;
            while sum[i] - sum[j] > x do inc(j);
            if (sum[i] - sum[j]) = x then inc(cur);
        end;
        writeln(cur);
    end;

end.

Download