Cod sursa(job #447684)

Utilizator Aleks10FMI - Petrache Alex Aleks10 Data 30 aprilie 2010 12:57:32
Problema Suma si numarul divizorilor Scor 30
Compilator fpc Status done
Runda Arhiva educationala Marime 1.49 kb
var
n,j:longint;
i,dim,exp,k,prod,putere,divizor,indice,nr,p:longint;
a,prim,v:array[1..10000] of longint;
f,g:text;
begin
        assign(f,'ssnd.in'); reset(f);
        assign(g,'ssnd.out'); rewrite(g);
        read(f,n);
        for j:=1 to n do
         read(f,a[j]);

         {Eratostene}
        i:=2;
        while i<= 10000 do
        begin
           if v[i]=0 then
           begin
              inc(dim);
              prim[dim]:=i;
              k:=2;
              while k*i<=10000 do
              begin
                   v[k*i]:=1;
                   inc(k);
              end;
            end;
            inc(i);
        end;

        for j:=1 to n do
        begin
            divizor:=prim[1]; indice:=1;
            k:=1; prod:=1;
            nr:=a[j];

            {Descompunerea in factori primi}

            while nr<>1 do
            begin
             exp:=0;   putere:=1;
                while nr mod divizor=0 do
                begin
                    inc(exp);
                    putere:=putere* divizor;
                    nr:=nr div divizor;
                end;
                if exp<>0 then
                begin
                    k:=k*(exp+1);
                    prod:=prod*(putere*divizor -1) div (divizor-1);
                end;
                inc(indice);
                divizor:=prim[indice];
            end;
            writeln(g,k,' ',prod mod 9973);
        end;

        close(f);
        close(g);
end.