Pagini recente » Monitorul de evaluare | Autentificare | Monitorul de evaluare | Cod sursa (job #117968) | Cod sursa (job #117979)
Cod sursa(job #117979)
var fi,fo:text;
n,ct,m,l:int64;
prime:array[1..50000]of longint;
puteri:array[1..100000]of longint;
prime2:array[1..100000]of byte;
primee:array[1..90000]of longint;
procedure gen(ba:longint);
var i,j:int64;
begin
i:=3;
primee[1]:=2;
l:=1;
prime2[1]:=1;
while i<=trunc(sqrt(ba)) do
begin
if prime2[i]=0 then
begin
j:=i*i;
inc(l);
primee[l]:=i;
while j<=ba do
begin
prime2[j]:=1; inc(j,i);
end;
end;
inc(i,2);
end;
end;
procedure desc(n:longint);
var i:longint;
r:int64;
begin
ct:=0;
for i:=1 to l do
begin
if n mod primee[i]=0 then
begin
inc(ct);
prime[ct]:=primee[i];
r:=1;
while n mod primee[i]=0 do
begin
n:=n div primee[i];
r:=r*primee[i];
end;
puteri[primee[i]]:=r;
end;
if n=1 then exit;
end;
if n>1 then
begin
inc(ct);
prime[ct]:=n;
puteri[n]:=n; end;
end;
procedure solv(n:longint);
var phi,rez:int64;
i:longint;
begin
desc(n);
phi:=1;
for i:=1 to ct do
phi:=phi*(prime[i]-1)*puteri[prime[i]] div prime[i];
rez:=n*phi shl 1;
writeln(fo,rez);
end;
var i:longint;
begin
assign(fi,'sum.in'); reset(fi);
assign(fo,'sum.out'); rewrite(fo);
read(fi,m);
gen(100000);
for i:=1 to m do
begin
read(fi,n);
if (n and 1=1)and(prime2[n]=0)then writeln(fo,(n-1)*n shl 1) else
solv(n);
end;
close(fi);
close(fo);
end.