Cod sursa(job #211494)

Utilizator codruta.pocolcodruta pocol codruta.pocol Data 2 octombrie 2008 17:03:49
Problema Fractii Scor 30
Compilator fpc Status done
Runda Arhiva de probleme Marime 0.75 kb
program p_003c; {fractii}
var phi,p:array [1..1000010] of longint;
    a,b:array [1..1000010] of longint;
    n,i,j,nr:longint;
begin
  assign(input,'fractii.in'); reset(input);
  assign(output,'fractii.out'); rewrite(output);
  readln(n);
  for i:=1 to n do p[i]:=0;
  for i:=2 to trunc(sqrt(n)) do
    if p[i]=0 then
      for j:=1 to n div i do p[i*j]:=i;
  for i:=2 to n do
    if p[i]=0 then p[i]:=i;
  for i:=2 to n do begin
    a[i]:=i;
    while (a[i] mod p[i])=0 do a[i]:=a[i] div p[i];
    b[i]:=i div a[i];
  end;
  for i:=2 to n do begin
    if a[i]=1 then phi[i]:=i-i div p[i]
        else phi[i]:=phi[a[i]]*phi[b[i]];
  end;
  nr:=1;
  for i:=2 to n do
    nr:=nr+2*phi[i];
  writeln(nr);
  close(input); close(output);
end.