Cod sursa(job #505288)

Utilizator vendettaSalajan Razvan vendetta Data 1 decembrie 2010 14:30:56
Problema Ridicare la putere in timp logaritmic Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 0.76 kb
//const m=1999999973;
var
    f,g:text;
    m,x,i,a,p,n,sol:longint;
    //buf:array[1..1 shl 17] of char;

function pow(a,b:longint):longint;
    begin
        //if not b then pow:=1;
        if b=1 then pow:=a mod m
                else pow:=(pow(a*a mod m,b div 2)*pow(a,b mod 2))mod m;
    end;

begin
    m:=1999999973;
    assign(f,'lgput.in');reset(f);
    assign(g,'lgput.out');rewrite(g);
    //settextbuf(f,buf);
    readln(f,n,p);
    {sol:=1;
    a:=n;
    for i:=0 to p do
    repeat
        begin
            if (1 shl i>0) and (p>0) then
                sol:=(sol*a) mod m;
            a:=(a*a) mod m;
        inc(i);
        end;
    until (1 shl i)<=p;
    write(g,sol);
    }write(g,pow(n,p));
    close(f);close(g);
end.