Pagini recente » Cod sursa (job #3248039) | Cod sursa (job #415717) | Cod sursa (job #3148954) | Cod sursa (job #3181224) | Cod sursa (job #73050)
Cod sursa(job #73050)
Program Fractii;
var n,NPr,nP,ii : longint;
Pr : array[1..78500] of longint;
IsPrim : array[1..1000000] of boolean;
P : array[1..10] of longint;
answer : real;
procedure Citeste;
var Intrare : text;
begin
assign(Intrare,'fractii.in');
reset(Intrare);
readln(Intrare,n);
close(Intrare);
end;
procedure Prim(num : longint);
var Pri : boolean;
j,radical : longint;
begin
Pri:=true;
j:=1;
radical:=trunc(sqrt(num));
while Pri and (Pr[j]<=radical) do
begin
Pri:=num mod Pr[j]<>0;
j:=j+1;
end;
if Pri then
begin
NPr:=NPr+1;
Pr[NPr]:=num;
IsPrim[num]:=true;
end
else IsPrim[num]:=false;
end;
procedure CalculeazaNumerePrime;
var i : longint;
begin
IsPrim[1]:=false;
IsPrim[2]:=true;
NPr:=1;
Pr[1]:=2;
for i:=3 to n do Prim(i);
end;
procedure VerificaPrim(var nr : longint; prim : longint);
begin
if (nr>1) and (nr mod prim=0) then
begin
while (nr>1) and (nr mod prim=0) do nr:=nr div prim;
inc(nP);
P[nP]:=prim;
end;
end;
procedure Descompunere(nr : longint);
var i : longint;
begin
nP:=0;
i:=1;
while nr>1 do
begin
VerificaPrim(nr,Pr[i]);
i:=i+1;
if IsPrim[nr] then
begin
inc(nP);
P[nP]:=nr;
nr:=1;
end;
end;
end;
function fi(nr : longint) : longint;
var i : integer;
begin
Descompunere(nr);
for i:=1 to nP do nr:=nr div P[i];
for i:=1 to nP do nr:=nr*(P[i]-1);
fi:=nr;
end;
procedure Calculeaza;
var realN : real;
i : longint;
begin
CalculeazaNumerePrime;
t1:=timpulcurent;
for i:=2 to N do answer:=answer+fi(i);
answer:=answer*2+1;
end;
procedure Scrie;
var Iesire : text;
begin
assign(Iesire,'fractii.out');
rewrite(Iesire);
write(Iesire,answer:0:0);
close(Iesire);
end;
begin
Citeste;
Calculeaza;
Scrie;
end.