source: git/Singular/modulop.h @ b719a3

spielwiese
Last change on this file since b719a3 was 8c8bea, checked in by Olaf Bachmann <obachman@…>, 25 years ago
* preparation for buckets git-svn-id: file:///usr/local/Singular/svn/trunk@3063 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 2.1 KB
Line 
1#ifndef MODULOP_H
2#define MODULOP_H
3/****************************************
4*  Computer Algebra System SINGULAR     *
5****************************************/
6/* $Id: modulop.h,v 1.5 1999-05-26 16:23:57 obachman Exp $ */
7/*
8* ABSTRACT: numbers modulo p (<=32003)
9*/
10#include "structs.h"
11
12extern int npPrimeM;
13extern int npGen;
14extern int npMapPrime;
15
16BOOLEAN npGreaterZero (number k);
17number  npMult        (number a, number b);
18number  npInit        (int i);
19int     npInt         (number &n);
20number  npCopy        (number k1);
21number  npAdd         (number a, number b);
22number  npSub         (number a, number b);
23void    npPower       (number a, int i, number * result);
24BOOLEAN npIsZero      (number a);
25BOOLEAN npIsOne       (number a);
26BOOLEAN npIsMOne       (number a);
27number  npDiv         (number a, number b);
28number  npNeg         (number c);
29number  npInvers      (number c);
30BOOLEAN npGreater     (number a, number b);
31BOOLEAN npEqual       (number a, number b);
32void    npWrite       (number &a);
33char *  npRead        (char *s, number *a);
34#ifdef LDEBUG
35BOOLEAN npDBTest      (number a, char *f, int l);
36#endif
37void    npSetChar(int c);
38//int     npGetChar();
39
40BOOLEAN npSetMap(int c, char ** par, int nop, number minpol);
41number  npMapP(number from);
42/*-------specials for spolys, do NOT use otherwise--------------------------*/
43/* for npMultM, npSubM, npNegM, npEqualM : */
44extern int npPminus1M;
45extern CARDINAL *npExpTable;
46extern CARDINAL *npLogTable;
47
48inline number npMultM(number a, number b)
49{
50  int x = npLogTable[(int)a]+npLogTable[(int)b];
51  return (number)npExpTable[x<npPminus1M ? x : x-npPminus1M];
52}
53
54inline number npAddM(number a, number b)
55{
56  int ka = (int)a + (int)b;
57  if (ka >= npPrimeM) ka -= npPrimeM;
58  return (number)ka;
59}
60
61inline BOOLEAN npIsZeroM (number  a)
62{
63  return 0 == (int)a;
64}
65
66/*
67*inline number npMultM(number a, number b)
68*{
69*  return (number)(((int)a*(int)b) % npPrimeM);
70*}
71*/
72#define npSubM(a,b)    (number)((int)a<(int)b ?\
73                       npPrimeM-(int)b+(int)a : (int)a-(int)b)
74#define npNegM(A)      (number)(npPrimeM-(int)(A))
75#define npEqualM(A,B)  ((int)A==(int)B)
76
77#endif
78
Note: See TracBrowser for help on using the repository browser.