比赛 NOIP2008集训模拟5 评测结果 EEEEEEEEEE
题目名称 连续素数和 最终得分 0
用户昵称 zhai 运行时间 0.000 s
代码语言 Pascal 内存使用 0.00 MiB
提交时间 2008-11-14 09:50:10
显示代码纯文本
program conprime;
  const
    max=10000;
  type
    sz=array[1..2,1..max]of integer;
    sx=array[0..1300]of integer;
    sy=array[1..max]of integer;
  var
    f1,f2:text;
    i,n,maxn:integer;
    a:sx;
    b:sz;
    c:sy;
    procedure ini;
      var
        i,x:integer;
        f:boolean;
      begin
        assign(f1,'conprime.in.in');reset(f1);
        assign(f2,'conprime.in.out');rewrite(f2);
        fillchar(a,sizeof(a),0);
        fillchar(b,sizeof(b),0);
        fillchar(c,sizeof(c),0);
        i:=0;
        f:=false;
        maxn:=0;
        repeat
          readln(f1,x);
          if x=0 then f:=true
          else begin
            if x>maxn then maxn:=x;
            inc(i);
            b[1,i]:=x;
            c[x]:=i;
          end;
        until f;
        n:=i;
        close(f1);
      end;
    procedure jian;
      var
        j,i,x:integer;
        f:boolean;
      begin
        a[1]:=2;
        a[2]:=3;
        a[3]:=5;
        i:=3;
        j:=7;
        while j<=maxn do begin
          x:=2;f:=true;
          while f and(x<=trunc(sqrt(j)))do
            if j mod x=0 then f:=false
            else inc(x);
          if f then begin
            inc(i);
            a[i]:=j;
          end;
          j:=j+2;
        end;
        a[0]:=i;
      end;
    procedure zhao(x:integer;var d:boolean);
      var
        h,t,k:integer;
      begin
        h:=1;
        t:=a[0];
        d:=false;
        while h<>t do begin
          k:=(h+t)div 2;
          if x>a[k] then h:=k+1
          else t:=k;
        end;
        if x=a[h] then d:=true;
      end;
    procedure main;
      var
        i,j,k:integer;
        d:boolean;
      begin
        for i:=1 to a[0]-1 do begin
          k:=a[i];
          j:=i+1;
          while k<=maxn do begin
            inc(k,a[j]);
            if c[k]<>0 then inc(b[2,c[k]]);
            inc(j);
          end;
        end;
        for i:=1 to n do begin
          zhao(b[1,i],d);
          if d then inc(b[2,i]);
        end;
      end;
  begin
    ini;
    jian;
    main;
    for i:=1 to n do writeln(f2,b[2,i]);
    close(f2);
  end.