Pagini recente » Cod sursa (job #2347744) | Cod sursa (job #284476) | Cod sursa (job #1815314) | Cod sursa (job #275506) | Cod sursa (job #608980)
Cod sursa(job #608980)
Program suma_numaru_diviz;
const md=9973;
var a:array [1..1000000] of boolean;
b:array [1..100000] of longint;
b1,b2:array [1..1 shl 15] of char;
n:int64;
k,t,d,s,x,i,j:longint;
fi,fo:text;
function pow(a,b:int64):int64;
begin
pow:=1;
while b>0 do
if b mod 2=0 then begin
a:=a*a;
a:=a mod md;
b:=b div 2;
end
else begin
pow:=pow*a;
pow:=pow mod md;
dec(b);
end;
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 begin
for j:=2 to 1000000 div i do
a[i*j]:=true;
inc(x);
b[x]:=i;
end;
for i:=1 to t do begin
readln(fi,n); j:=1; k:=1; s:=1;
while (sqr(b[j])<=n) and (n>1) and (j<=x) do
if n mod b[j]=0 then begin
d:=0;
while n mod b[j]=0 do begin
n:=n div b[j];
inc(d);
end;
k:=k*(d+1);
s:=s*(pow(b[j],d+1)-1); s:=s mod md;
s:=s*(pow(b[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.