学校のプログラミング チームのオンライン ジャッジ用に Pascal プログラムを作成しようとしています。プログラムは a^b mod c を出力する必要があります。ここで、a、b、c は入力として与えられます。テストケースはすべて非常に大きな数であるため、ブルートフォースを使用することはできません。
いくつかの調査の結果、分割統治戦略を使用できることがわかりました。これは私が思いついたコードです:
function pmod(a,b,c:longint):integer;
begin
if b = 0 then
pmod := 1;
if b = 1 then
pmod := a mod c;
if b > 1 then
begin
if (b mod 2) = 0 then
pmod := (pmod(a,b div 2,c) * pmod(a,b div 2,c)) mod c
else
pmod := (pmod(a,b-1,c) * (a mod c)) mod c;
end;
end;
しかし、オンライン審査員は不正解を返しました。コードの問題点を指摘できる人はいますか?