xref: /inferno-os/libmp/port/mpmod.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth #include "os.h"
2*37da2899SCharles.Forsyth #include <mp.h>
3*37da2899SCharles.Forsyth #include "dat.h"
4*37da2899SCharles.Forsyth 
5*37da2899SCharles.Forsyth // remainder = b mod m
6*37da2899SCharles.Forsyth //
7*37da2899SCharles.Forsyth // knuth, vol 2, pp 398-400
8*37da2899SCharles.Forsyth 
9*37da2899SCharles.Forsyth void
mpmod(mpint * b,mpint * m,mpint * remainder)10*37da2899SCharles.Forsyth mpmod(mpint *b, mpint *m, mpint *remainder)
11*37da2899SCharles.Forsyth {
12*37da2899SCharles.Forsyth 	mpdiv(b, m, nil, remainder);
13*37da2899SCharles.Forsyth 	if(remainder->sign < 0)
14*37da2899SCharles.Forsyth 		mpadd(m, remainder, remainder);
15*37da2899SCharles.Forsyth }
16