Cod sursa(job #1419305)

Utilizator ButnaruButnaru George Butnaru Data 15 aprilie 2015 12:30:00
Problema Suma si numarul divizorilor Scor 70
Compilator fpc Status done
Runda Arhiva educationala Marime 1.29 kb
program ssnd;
const maxprim=trunc(1e4)*4;
      modd=9973;
type vector1=array[0..maxprim+1] of byte;
     vector2=array[0..100001] of longint;
     buf=array[0..1 shl 17] of char;
var t:vector1; prime:vector2; ff1,ff2:buf;
    n,i,j,nr,l,sol1,sol2,prim,sum,term,max:longint; x:qword;
    f1,f2:text;
procedure ciur(n:longint);
begin
i:=2;
while i*i<=n do begin
if t[i]=0 then begin
j:=i*i;
while j<=n do begin
t[j]:=1;
j:=j+2*i;
end;
end;
i:=i+1;
end;
prime[1]:=2; nr:=1; i:=3;
while i<=maxprim do begin
if t[i]=0 then begin nr:=nr+1; prime[nr]:=i; end;
i:=i+2;
end;
end;
begin
assign (f1,'ssnd.in');
assign (f2,'ssnd.out');
reset (f1);
rewrite (f2);
settextbuf(f1,ff1);
settextbuf(f2,ff2);
readln (f1,n);
ciur(maxprim);
for i:=1 to n do begin
readln (f1,x); j:=1; sol1:=1; sol2:=1; max:=trunc(sqrt(x));
while (x>1) and (prime[j]<=max) and (j<=nr) do begin
while (j<=nr) and (x mod prime[j]<>0) do j:=j+1;
l:=0; sum:=1; term:=1;
if j>nr then break;
prim:=prime[j];
while x mod prime[j]=0 do begin l:=l+1; x:=x div prime[j];
term:=(term*prim) mod modd; sum:=(sum+term) mod modd;
end;
sol1:=sol1*(l+1); sol2:=(sol2*sum) mod modd;
end;
if x>1 then begin sol1:=sol1*2; sol2:=sol2*(x+1) mod modd; end;
writeln (f2,sol1,' ',sol2);
end;
close (f1);
close (f2);
end.