Cod sursa(job #505289)

Utilizator vendettaSalajan Razvan vendetta Data 1 decembrie 2010 14:31:05
Problema Ridicare la putere in timp logaritmic Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 0.92 kb
const m=1999999973;
var
    f,g:text;
    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);
    x:=1;
    while p<>0 do
        begin
        if (p div 2=1) then x:=x*n mod m;
        p:=p div 2;
        n:=n*n mod m;
        end;
    {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));
    }
    write(g,x);
    close(f);close(g);
end.