Cod sursa(job #53541)

Utilizator radu_voroneanuVoroneanu Radu Stefan radu_voroneanu Data 22 aprilie 2007 14:43:25
Problema Fractii Scor 10
Compilator fpc Status done
Runda Arhiva de probleme Marime 0.83 kb
var n,nr,r:int64;
    phi:array[1..1000000] of int64;
    i,j:longint;
    f,g:text;
function  cmmdc(a,b:longint):longint;
 var c:longint;
 begin
  while b<>0 do begin
   c:=a mod b;
   a:=b;
   b:=c;
  end;
  cmmdc:=a;
 end;
begin
 assign(f,'fractii.in'); reset(f);
 assign(g,'fractii.out'); rewrite(g);
 read(f,n);
 r:=1;
 for i:=2 to n do begin
  if phi[i]=0 then begin
   nr:=i;
   phi[i]:=nr;
   for j:=2 to trunc(sqrt(n)) do begin
    if nr mod j=0 then
     phi[i]:=(phi[i]*(j-1)) div j;
    while nr mod j=0 do
     nr:=nr div j;
   end;
   if nr>1 then
    phi[i]:=(phi[i]*(nr-1)) div nr;
   r:=r+(phi[i] shl 1);
   j:=1;
   while j<n do begin
    inc(j);
    if cmmdc(j,i)=1 then
     phi[j*i]:=phi[j]*phi[i];
   end;
  end
  else
   r:=r+(phi[i] shl 1);
 end;
 writeln(g,r);
 closE(f); close(g);
end.