我正在尝试为我学校编程团队的在线评委制作一个 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;
但是,在线法官返回了错误的答案。有人能指出代码有什么问题吗?