Subversion Repositories planix.SVN

Rev

Rev 22 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 22 Rev 26
Line 2... Line 2...
2
#include <mp.h>
2
#include <mp.h>
3
#include "dat.h"
3
#include "dat.h"
4
 
-
 
5
// remainder = b mod m
-
 
6
//
-
 
7
// knuth, vol 2, pp 398-400
-
 
8
 
4
 
9
void
5
void
10
mpmod(mpint *b, mpint *m, mpint *remainder)
6
mpmod(mpint *x, mpint *n, mpint *r)
11
{
7
{
-
 
8
	int sign;
-
 
9
	mpint *ns;
-
 
10
 
-
 
11
	sign = x->sign;
-
 
12
	ns = sign < 0 && n == r ? mpcopy(n) : n;
-
 
13
	if((n->flags & MPfield) == 0
-
 
14
	|| ((Mfield*)n)->reduce((Mfield*)n, x, r) != 0)
12
	mpdiv(b, m, nil, remainder);
15
		mpdiv(x, n, nil, r);
13
	if(remainder->sign < 0)
16
	if(sign < 0){
14
		mpadd(m, remainder, remainder);
17
		mpmagsub(ns, r, r);
-
 
18
		if(ns != n) mpfree(ns);
-
 
19
	}
15
}
20
}