projects
/
unix-history
/ blob
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
blame
|
history
|
raw
|
HEAD
date and time created 83/03/09 16:22:25 by ralph
[unix-history]
/
usr
/
src
/
lib
/
libmp
/
pow.c
/* @(#)pow.c 4.1 %G% */
#include <mp.h>
pow
(
a
,
b
,
c
,
d
)
MINT
*
a
,*
b
,*
c
,*
d
;
{
int
i
,
j
,
n
;
MINT x
,
y
;
x
.
len
=
y
.
len
=
0
;
xfree
(
d
);
d
->
len
=
1
;
d
->
val
=
xalloc
(
1
,
"pow"
);
*
d
->
val
=
1
;
for
(
j
=
0
;
j
<
b
->
len
;
j
++)
{
n
=
b
->
val
[
b
->
len
-
j
-
1
];
for
(
i
=
0
;
i
<
15
;
i
++)
{
mult
(
d
,
d
,&
x
);
mdiv
(&
x
,
c
,&
y
,
d
);
if
((
n
=
n
<<
1
)&
0100000
)
{
mult
(
a
,
d
,&
x
);
mdiv
(&
x
,
c
,&
y
,
d
);
}
}
}
xfree
(&
x
);
xfree
(&
y
);
return
;
}
rpow
(
a
,
n
,
b
)
MINT
*
a
,*
b
;
{
MINT x
,
y
;
int
i
;
x
.
len
=
1
;
x
.
val
=
xalloc
(
1
,
"rpow"
);
*
x
.
val
=
n
;
y
.
len
=
n
*
a
->
len
+
4
;
y
.
val
=
xalloc
(
y
.
len
,
"rpow2"
);
for
(
i
=
0
;
i
<
y
.
len
;
i
++)
y
.
val
[
i
]=
0
;
y
.
val
[
y
.
len
-
1
]=
010000
;
xfree
(
b
);
pow
(
a
,&
x
,&
y
,
b
);
xfree
(&
x
);
xfree
(&
y
);
return
;
}