Pagini recente » Cod sursa (job #695939) | Cod sursa (job #1412933) | Cod sursa (job #1794986) | Cod sursa (job #309543) | Cod sursa (job #11074)
Cod sursa(job #11074)
Program cel;
Type vector=array[2..10000] of boolean;
vector1=array[2..10000] of longint;
dubla=record
prime,neprime:vector;
end;
var f,g:text;
a:dubla;
phi:vector1;
n,i,j,p,nr,x,d,fm:longint;
Begin
Assign(f,'fractii.in');Reset(f);
Assign(g,'fractii.out');Rewrite(g);
Read(f,n);
For i:=2 to n do
Begin
a.prime[i]:=true;
a.neprime[i]:=false;
end;
For i:=2 to trunc(sqrt(n)) do
If a.prime[i]=true then Begin
j:=2;
While i*j<=n do
Begin
a.prime[i*j]:=false;
inc(j);
end;
end;
For i:=2 to n do
If a.prime[i]=true then phi[i]:=i-1;
i:=2;
While i<=trunc(sqrt(n)) do
Begin
p:=i;
While i*p<=n do
Begin
phi[i*p]:=i*phi[p];
a.neprime[i*p]:=true;
i:=i*p;
end;
i:=p+1;
end;
For i:=2 to n do
If (a.prime[i]=false) and (a.neprime[i]=false) then
Begin
x:=i;
d:=2;
phi[i]:=1;
repeat
fm:=0;
While x mod d=0 do
Begin
x:=x div d;
inc(fm);
end;
If fm<>0 then phi[i]:=phi[i]*phi[trunc(exp(fm*ln(d)))];
repeat
inc(d);
until a.prime[d]=true;
until x=1;
end;
nr:=0;
For i:=2 to n do nr:=nr+phi[i];
nr:=1+2*nr;
Write(g,nr);
Close(f);
Close(g);
end.