Cod sursa(job #12398)

Utilizator Tase_CCapalna Tanase Tase_C Data 3 februarie 2007 18:28:32
Problema Fractii Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 0.66 kb
var v,a,b,phi:array[1..1001000]of longint;
    n,l:longint;
    r:int64;
    i,j:longint;
begin
  assign(input,'fractii.in'); reset(input);
  assign(output,'fractii.out'); rewrite(output);
  readln(n); l:=trunc(sqrt(n));
  for i:=2 to l do
    if v[i]=0 then
      for j:=1 to n div i do v[i*j]:=i;
  for i:=l+1 to n do
    if v[i]=0 then v[i]:=i;
  for i:=2 to n do begin
    a[i]:=v[i];
    j:=i div a[i];
    while j mod a[i]=0 do a[i]:=a[i]*v[i];
    b[i]:=i div a[i];
    if b[i]=1 then phi[i]:=i-i div v[i]
    else phi[i]:=phi[a[i]]*phi[b[i]];
  end;
  for i:=2 to n do r:=r+phi[i];
  r:=2*r+1;
  write(r);
  close(input); close(output);
end.