Cod sursa(job #965356)

Utilizator RusuAlexeiRusu Alexei RusuAlexei Data 23 iunie 2013 23:17:27
Problema Suma si numarul divizorilor Scor 70
Compilator fpc Status done
Runda Arhiva educationala Marime 1.24 kb
program suma_si_numarul_divizorilor;
  var ciur:array [1..1000000] of byte;
      prime:array [1..100000] of longint;
      k,t,i,j:longint;
      n,sum,p,s,nr:int64;



function putere(n,p:int64):int64;
  var m,rez:int64;
  begin
    m:=n;
    rez:=1;
    while p>0 do
      begin
        if p mod 2 =1 then rez:=(rez*m);
        m:=sqr(m);
        p:=p div 2;
      end;
    putere:=rez;
  end;

begin
  assign(input,'ssnd.in');
  reset(input);
  assign(output,'ssnd.out');
  rewrite(output);

  for i:=2 to 1000000 do
    if ciur[i]=0 then
      begin
        j:=2*i;
        while j<=1000000 do
          begin
            ciur[j]:=1;
            j:=j+i;
          end;
        inc(k);
        prime[k]:=i;
      end;


  readln(t);
  for i:=1 to t do
    begin
      readln(n);
      j:=1;
      nr:=1;sum:=1;
      while n<>1 do
        begin
          k:=0;
          while n mod prime[j]=0 do
            begin
              n:=n div prime[j];
              inc(k);
            end;
          nr:=nr*(k+1);
          p:=putere(prime[j],k+1)-1;
          p:=p div (prime[j]-1);
          sum:=(sum*p)mod 9973;
          inc(j);
        end;
      writeln(nr,' ',sum);
    end;
  close(output);
end.