Cod sursa(job #117940)

Utilizator bogdan88Bogdan Popescu bogdan88 Data 22 decembrie 2007 19:48:18
Problema Sum Scor 80
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.45 kb
var fi,fo:text;
    n,ct,m,l:longint;
    phi:int64;
const primee:array[1..66]of integer=(2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,
59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,
167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,
277,281,283,293,307,311,313,317);
{procedure gen(ba:longint);
var i,j:int64;
begin
  i:=3;
  primee[1]:=2;
  l:=1;
  prime2[1]:=1;
  while i<=ba do
    begin
      if prime2[i]=0 then
        begin
          j:=i*i;
          inc(l);
          primee[l]:=i;
          while j<=ba do
             begin
                prime2[j]:=1; inc(j,i);
             end;
        end;
      inc(i,2);
    end;
end;}
procedure solv(n:int64);
var i:longint;
    r,rez:int64;
begin
  ct:=n; phi:=1;
  for i:=1 to 66 do
    begin
      if n mod primee[i]=0 then
        begin
          r:=1;
          while n mod primee[i]=0 do
            begin
              n:=n div primee[i];
              r:=r*primee[i];
            end;
          phi:=phi*(primee[i]-1)*r div primee[i];
        end;
      if n=1 then break;
    end;
  if n>1 then
     phi:=phi*(n-1);
  rez:=2*ct*phi;
  writeln(fo,rez);
end;
var i:longint;
begin
  assign(fi,'sum.in'); reset(fi);
  assign(fo,'sum.out'); rewrite(fo);
  read(fi,m);
  {gen(trunc(sqrt(100000)));}
  for i:=1 to m do
    begin
      read(fi,n);
      solv(n);
    end;
  close(fi);
  close(fo);
end.