Pagini recente » Cod sursa (job #2394880) | Cod sursa (job #1519553) | Cod sursa (job #218568) | Cod sursa (job #116672) | Cod sursa (job #426508)
Cod sursa(job #426508)
program suma_si_numarul_divizorilor;
const max=1000000;
var f,g:Text;
ciur:array[1..max]of integer;
n,sum,nrd,p:int64;
t,j,k:int64;
i:longint;
procedure sieve; {!} {ciurul lui Erathostene} {!}
var i,j:longint;
begin
for i:=1 to max do {pun 1 daca e prim si 0 daca nu e prim}
ciur[i]:=1; {initial presupun ca toate sunt prime}
i:=2; {pornesc cu 2 si marchez toti multiplii}
while i*i<=max do {lui ca fiind neprimi. Cat timp mai am numere}
begin {prime ale caror multiplii nu i-am marcat...}
if ciur[i]=1 then {daca nu e marcat deja ca fiind neprim}
begin {marchez toti multimplii lui i ca fiind}
j:=2; {neprimi, fara a trece peste max}
while i*j<max do
begin
ciur[i*j]:=0;
inc(j);
end;
end;
inc(i);
end;
end;
function pow(a,b:int64):int64;
var i:longint;
begin
pow:=a;
for i:=2 to b do
pow:=pow*a;
end;
procedure rezolvare(n:int64);
begin
sum:=1;
nrd:=1;
j:=2;
while n>1 do
begin
while ciur[j]=0 do
inc(j);
p{puterea}:=0;
while n mod j=0 do
begin
inc(p);
n:=n div j;
end;
nrd{numarul divizorilor}:=nrd*(p+1);
{calculez j la puterea p+1}
{pow(j,p+1)}
sum:=sum*( (pow(j,p+1)-1) div (j-1) );
inc(j);
end;
writeln(g,nrd,' ',sum mod 9973);
end;
begin
assign(f,'ssnd.in'); reset(f);
assign(g,'ssnd.out'); rewrite(g);
readln(f,t);
sieve;
for i:=1 to t do
begin
readln(f,n);
rezolvare(n);
end;
close(f); close(g);
end.