Cod sursa(job #587065)

Utilizator ion_calimanUAIC Ion Caliman ion_caliman Data 3 mai 2011 20:17:40
Problema Suma si numarul divizorilor Scor 30
Compilator fpc Status done
Runda Arhiva educationala Marime 1.32 kb
var     t,i,j,k,l,poz:longint;
        n,nr,s,n1:int64;
        a:array[1..1000000] of boolean;
        b:array[1..100000] of longint;
        f,g:text;

begin
  assign(f,'ssnd.in');
  assign(g,'ssnd.out');
  reset(f);
  rewrite(g);
  readln(f,t);
  n:=1000000;
  for i:=2 to n do
    a[i]:=true;
  for i:=2 to round(sqrt(n)) do
    if a[i] then
    begin
      j:=i;
      while j+i<=n do
        begin
          inc(j,i);
          a[j]:=false;
        end;
    end;
  poz:=0;
  for i:=2 to round(sqrt(n)) do
    if a[i] then
    begin
      inc(poz);
      b[poz]:=i;
    end;

    for l:=1 to t do
    begin
      readln(f,n);
      s:=1;
      nr:=1;
      n1:=n;
      i:=1;
      while (b[i]<=round(sqrt(n)))and(i<=poz) do
        if (n1 mod b[i]=0) then
        begin
          begin
            j:=0;
            k:=b[i];
            while n1 mod b[i]=0 do
              begin
                n1:=n1 div b[i];
                inc(j);
                k:=k*b[i];
              end;
            nr:=nr*(j+1);
            s:=s*((k-1) div (b[i]-1)) mod 9973;
          end;
          inc(i);
        end else inc(i);
      if n1<>1 then
        begin
          nr:=nr*2;
          s:=s*((n1*n1-1) div (n1-1)) mod 9973;
        end;
      writeln(g,nr,' ',s);
    end;
  close(g);
end.