Cod sursa(job #1199443)

Utilizator atatomirTatomir Alex atatomir Data 19 iunie 2014 14:33:45
Problema Suma si numarul divizorilor Scor 70
Compilator fpc Status done
Runda Arhiva educationala Marime 1.29 kb
const def=1005000;
      modd=9973;
var t,ti:longint;
    i:longint;
    c:array[0..def+5]of boolean;
    prim:array[0..80000]of longint;
    nr,sum,p,d,n,h:int64;

procedure ciur();
var i,ii,hh,j,h:longint;
begin
  prim[0] := 0;
  for i := 2 to def do
    c[i] := true;
  h := trunc(sqrt(def));
  for i := 2 to h do
    if c[i] then
    begin
      hh := def div i;
      for j := i to hh do c[i*j] := false;
    end;
  for i := 1 to def do
    if c[i] then
    begin
      inc(prim[0]); prim[prim[0]] := i;
    end;
end;

begin
  assign(input,'ssnd.in'); reset(input);
  assign(output,'ssnd.out'); rewrite(output);

  ciur();

  readln(t);
  for ti := 1 to t do
  begin
    readln(n);
    nr := 1; sum := 1;
    h := trunc(sqrt(n));
    i := 0;
    while prim[i+1] <= h do
    begin
      inc(i);
      p := 1; d := prim[i];
      while n mod prim[i] = 0 do
      begin
        inc(p); d := d * prim[i];
        n := n div prim[i];
      end;
      nr := (nr * p)mod modd;
      sum := (sum * ((d-1) div (prim[i]-1)))mod modd;
    end;
    if n <> 1 then
    begin
      nr := nr * 2; nr := nr mod modd;
      sum := sum * ((n*n-1) div (n-1)); sum := sum mod modd;
    end;

    writeln(nr,' ',sum);

  end;


  close(input);
  close(output);
end.