Esto es lo único que se me ocurre hasta que venga roman y me deje en ridículo
Código Delphi
[-]
uses FMTBcd;
function Modulo97(Numero: string): Integer;
var
s,t: TBcd;
begin
s:= StrToBCD(Numero);
BcdDivide(s,97,t);
t.Precision:= t.Precision - t.SignSpecialPlaces;
t.SignSpecialPlaces:= 0;
BcdMultiply(t,97,t);
BcdSubtract(s,t,s);
Result:= BcdToInteger(S,TRUE);
end;
ShowMessage(IntToStr(Modulo97('123456789012345678901234567890')));
... aunque me queda la sensación de estar matando moscas a cañonazos