Pagini recente » Cod sursa (job #678208) | Cod sursa (job #2810494) | Cod sursa (job #2899193) | Cod sursa (job #2675766) | Cod sursa (job #387980)
Cod sursa(job #387980)
program pascal;
var
f:text;
v:array[1..1000000] of byte;
n,calcul:longint;
procedure prime;
var
i,j:longint;
begin
for i:=1 to n do
v[i]:=1;
for i:=2 to trunc(sqrt(n)) do
if v[i] = 1 then
for j:=2 to n div i do
v[j*i]:=0;
end;
function rid_p(a,b:longint):longint;
{functie de ridicare la puterea b a numarului a}
var
t:integer;
put:longint;
begin
put:=1;
for t:=1 to b do
put:=put*a;
rid_p:=put;
end;
procedure rezultat;
var
i,j,fi,x,putere:longint;
begin
calcul:=1;
for i:=2 to n do begin
x:=i;
fi:=1;
for j:=2 to (i div 2) do
if x=1 then break
else
if (v[j]=1) and (x mod j = 0) then begin
putere:=0;
while (x mod j = 0) and (x<>1) do begin
inc(putere);
x:=x div j;
end;
fi:=fi * (j-1)*rid_p(j,putere-1);
end;
if x<>1 then begin
putere:=0;
while (x mod i = 0) and (x<>1) do begin
inc(putere);
x:=x div i;
end;
fi:=fi * (i-1)*rid_p(i,putere-1);
end;
calcul:=calcul+fi;
end;
end;
begin
assign(f,'fractii.in');
reset(f);
read(f,n);
close(f);
prime;
rezultat;
assign(f,'fractii.out');
rewrite(f);
write(f,calcul*2-1);
close(f);
end.