source: git/kernel/rmodulon.h @ b18621

spielwiese
Last change on this file since b18621 was 1e579c6, checked in by Oliver Wienand <wienand@…>, 16 years ago
kutil.cc: * use nExtGcd, nIsUnit * extended spolys only for non-domains numbers.cc, numbers.h, structs.h: * new Functions: nIsUnit, nGetUnit, nExtGcd * new Field: the Integers polys.cc, polys.h: * nGetUnit hack removed * minor memory glitch polys1.cc: * no pContent for Integers ring.h: new rField methos for Integers and p^n rintegers.*: implementation of the whole numbers using gmp rmodulo*: added funcs: nIsUnit, nGetUnit, nExtGcd git-svn-id: file:///usr/local/Singular/svn/trunk@10125 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 2.2 KB
Line 
1#ifndef RMODULON_H
2#define RMODULON_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/* $Id: rmodulon.h,v 1.4 2007-06-20 09:39:25 wienand Exp $ */
7/*
8* ABSTRACT: numbers modulo n
9*/
10#ifdef HAVE_RINGMODN
11#include "structs.h"
12
13#ifndef NATNUMBER
14#define NATNUMBER unsigned long
15#endif
16
17extern int nrnExp;
18extern NATNUMBER nrnModul;
19
20BOOLEAN nrnGreaterZero (number k);
21number  nrnMult        (number a, number b);
22number  nrnInit        (int i);
23int     nrnInt         (number &n);
24number  nrnAdd         (number a, number b);
25number  nrnSub         (number a, number b);
26void    nrnPower       (number a, int i, number * result);
27BOOLEAN nrnIsZero      (number a);
28BOOLEAN nrnIsOne       (number a);
29BOOLEAN nrnIsMOne      (number a);
30BOOLEAN nrnIsUnit      (number a);
31number  nrnGetUnit     (number a);
32number  nrnDiv         (number a, number b);
33number  nrnIntDiv      (number a,number b);
34number  nrnNeg         (number c);
35number  nrnInvers      (number c);
36BOOLEAN nrnGreater     (number a, number b);
37BOOLEAN nrnDivBy       (number a, number b);
38int     nrnComp        (number a, number b);
39BOOLEAN nrnEqual       (number a, number b);
40number  nrnLcm         (number a,number b, ring r);
41number  nrnGcd         (number a,number b,ring r);
42number  nrnExtGcd      (number a, number b, number *s, number *t);
43nMapFunc nrnSetMap     (ring src, ring dst);
44void    nrnWrite       (number &a);
45char *  nrnRead        (char *s, number *a);
46char *  nrnName        (number n);
47#ifdef LDEBUG
48BOOLEAN nrnDBTest      (number a, char *f, int l);
49#endif
50void    nrnSetExp(int c, ring r);
51void    nrnInitExp(int c, ring r);
52
53
54static inline number nrnMultM(number a, number b)
55{
56  return (number) 
57    ((((NATNUMBER) a)*((NATNUMBER) b)) % ((NATNUMBER) nrnModul));
58}
59
60static inline number nrnAddM(number a, number b)
61{
62  NATNUMBER r = (NATNUMBER)a + (NATNUMBER)b;
63  return (number) (r >= nrnModul ? r - nrnModul : r);
64}
65
66static inline number nrnSubM(number a, number b)
67{
68  return (number)((NATNUMBER)a<(NATNUMBER)b ?
69                       nrnModul-(NATNUMBER)b+(NATNUMBER)a : (NATNUMBER)a-(NATNUMBER)b);
70}
71
72#define nrnNegM(A) (number)(nrnModul-(NATNUMBER)(A))
73#define nrnEqualM(A,B)  ((A)==(B))
74
75#endif
76#endif
Note: See TracBrowser for help on using the repository browser.