My Project
Loading...
Searching...
No Matches
factory
ffops.cc
Go to the documentation of this file.
1
/* emacs edit mode for this file is -*- C++ -*- */
2
3
4
#include "config.h"
5
6
7
#include <string.h>
8
9
#include "
cf_assert.h
"
10
11
#include "
cf_defs.h
"
12
#include "
ffops.h
"
13
14
VAR
int
ff_prime
= 0;
15
VAR
int
ff_halfprime
= 0;
16
VAR
bool
ff_big
=
false
;
17
VAR
short
*
ff_invtab
=
new
short
[32767];
18
19
void
ff_setprime
(
const
int
p
)
20
{
21
if
(
p
!=
ff_prime
)
22
{
23
ff_prime
=
p
;
24
ff_halfprime
=
ff_prime
/ 2;
25
if
( !
ff_big
)
26
memset
(
ff_invtab
, 0,
ff_prime
*
sizeof
(
short
) );
27
}
28
}
29
30
int
ff_newinv
(
const
int
a )
31
{
32
if
(a < 2)
33
return
(
ff_invtab
[a] = a);
34
int
p
, q,
r1
,
r2
,
y1
,
y2
;
35
r1
=
p
=
ff_prime
;
36
q =
r1
/ a;
37
y1
= -q;
38
r1
-= a * q;
39
if
(
r1
== 1)
40
{
41
y1
+=
p
;
42
ff_invtab
[
y1
] = a;
43
return
(
ff_invtab
[a] =
y1
);
44
}
45
r2
= a;
46
y2
= 1;
47
for
(;;)
48
{
49
q =
r2
/
r1
;
50
y2
-=
y1
* q;
51
r2
-=
r1
* q;
52
if
(
r2
== 1)
53
{
54
if
(
y2
< 0)
55
y2
+=
p
;
56
ff_invtab
[
y2
] = a;
57
return
(
ff_invtab
[a] =
y2
);
58
}
59
q =
r1
/
r2
;
60
y1
-=
y2
* q;
61
r1
-=
r2
* q;
62
if
(
r1
== 1)
63
{
64
if
(
y1
< 0)
65
y1
+=
p
;
66
ff_invtab
[
y1
] = a;
67
return
(
ff_invtab
[a] =
y1
);
68
}
69
}
70
}
71
72
int
ff_biginv
(
const
int
a )
73
{
74
if
(a < 2)
75
return
a;
76
int
p
, q,
r1
,
r2
,
y1
,
y2
;
77
r1
=
p
=
ff_prime
;
78
q =
r1
/ a;
79
y1
= -q;
80
r1
-= a * q;
81
if
(
r1
== 1)
82
return
p
+
y1
;
83
r2
= a;
84
y2
= 1;
85
for
(;;)
86
{
87
q =
r2
/
r1
;
88
y2
-=
y1
* q;
89
r2
-=
r1
* q;
90
if
(
r2
== 1)
91
{
92
if
(
y2
> 0)
93
return
y2
;
94
else
95
return
p
+
y2
;
96
}
97
q =
r1
/
r2
;
98
y1
-=
y2
* q;
99
r1
-=
r2
* q;
100
if
(
r1
== 1)
101
{
102
if
(
y1
> 0)
103
return
y1
;
104
else
105
return
p
+
y1
;
106
}
107
}
108
}
p
int p
Definition
cfModGcd.cc:4079
cf_assert.h
assertions for Factory
cf_defs.h
factory switches.
List
Definition
ftmpl_list.h:52
ff_biginv
int ff_biginv(const int a)
Definition
ffops.cc:72
ff_prime
VAR int ff_prime
Definition
ffops.cc:14
ff_invtab
VAR short * ff_invtab
Definition
ffops.cc:17
ff_halfprime
VAR int ff_halfprime
Definition
ffops.cc:15
ff_big
VAR bool ff_big
Definition
ffops.cc:16
ff_setprime
void ff_setprime(const int p)
Definition
ffops.cc:19
ff_newinv
int ff_newinv(const int a)
Definition
ffops.cc:30
ffops.h
operations in a finite prime field F_p.
VAR
#define VAR
Definition
globaldefs.h:5
Generated on Thu Feb 29 2024 16:01:11 for My Project by
doxygen 1.9.8
for
Singular