Cod sursa(job #603305)

Utilizator ctlin04UAIC.VlasCatalin ctlin04 Data 15 iulie 2011 13:49:13
Problema Suma si numarul divizorilor Scor 40
Compilator fpc Status done
Runda Arhiva educationala Marime 1.7 kb
Program suma_numaru_diviz;
const md=9973;
 var a:array [1..1000000] of boolean;
    b1,b2:array [1..1 shl 17] of char;
   n,k,t,d,p:int64;
   s,i,j:longword;
   fi,fo:text;
function pow(a,b:int64):int64;
var i,p:longint;
begin
 p:=1;
  for i:=1 to b do begin
                    p:=p*a;
                    p:=p mod md;
                    end;
  pow:=p;
end;

begin
assign(fi,'ssnd.in');
 assign(fo,'ssnd.out');
settextbuf(fi,b1);
settextbuf(fo,b2);
reset(fi);
 rewrite(fo);
readln(fi,t);
  for i:=2 to 1000000 do
                if not a[i] then
                  for j:=2 to 1000000 div i do
                                     a[i*j]:=true;
for i:=1 to t do begin
 readln(fi,n); j:=2; k:=1; s:=1;
  while (sqr(j)<=n) and (n>1) do
   if (a[j]=false) and (n mod j=0) then begin
                                         d:=0; p:=1;
                                          while n mod j=0 do begin
                                                        n:=n div j;
                                                        p:=p*j;
                                                        p:=p mod md;
                                                           inc(d);
                                                             end;
                                k:=k*(d+1);
                                  s:=s*(p*j-1); s:=s mod md;
                                  s:=s*(pow(j-1,md-2)); s:=s mod md;
                                          end
                               else inc(j);
 if n>1 then begin
               k:=k shl 1;
                s:=s*((n+1) mod md);
                 s:=s mod md;
               end;
         writeln(fo,k,' ',s);
 end;
close(fo);
end.