Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F947604
BigInteger-ext.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
11 KB
Subscribers
None
BigInteger-ext.js
View Options
/*
Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
Available via Academic Free License >= 2.1 OR the modified BSD license.
see: http://dojotoolkit.org/license for details
*/
if
(
!
dojo
.
_hasResource
[
"dojox.math.BigInteger-ext"
]){
dojo
.
_hasResource
[
"dojox.math.BigInteger-ext"
]
=
true
;
dojo
.
provide
(
"dojox.math.BigInteger-ext"
);
dojo
.
experimental
(
"dojox.math.BigInteger-ext"
);
dojo
.
require
(
"dojox.math.BigInteger"
);
(
function
(){
var
_1
=
dojox
.
math
.
BigInteger
,
_2
=
_1
.
_nbi
,
_3
=
_1
.
_nbv
,
_4
=
_1
.
_nbits
,
_5
=
_1
.
_Montgomery
;
function
_6
(){
var
r
=
_2
();
this
.
_copyTo
(
r
);
return
r
;
};
function
_7
(){
if
(
this
.
s
<
0
){
if
(
this
.
t
==
1
){
return
this
[
0
]
-
this
.
_DV
;
}
else
{
if
(
this
.
t
==
0
){
return
-
1
;
}
}
}
else
{
if
(
this
.
t
==
1
){
return
this
[
0
];
}
else
{
if
(
this
.
t
==
0
){
return
0
;
}
}
}
return
((
this
[
1
]
&
((
1
<<
(
32
-
this
.
_DB
))
-
1
))
<<
this
.
_DB
)
|
this
[
0
];
};
function
_8
(){
return
(
this
.
t
==
0
)
?
this
.
s
:
(
this
[
0
]
<<
24
)
>>
24
;
};
function
_9
(){
return
(
this
.
t
==
0
)
?
this
.
s
:
(
this
[
0
]
<<
16
)
>>
16
;
};
function
_a
(
r
){
return
Math
.
floor
(
Math
.
LN2
*
this
.
_DB
/
Math
.
log
(
r
));
};
function
_b
(){
if
(
this
.
s
<
0
){
return
-
1
;
}
else
{
if
(
this
.
t
<=
0
||
(
this
.
t
==
1
&&
this
[
0
]
<=
0
)){
return
0
;
}
else
{
return
1
;
}
}
};
function
_c
(
b
){
if
(
b
==
null
){
b
=
10
;
}
if
(
this
.
signum
()
==
0
||
b
<
2
||
b
>
36
){
return
"0"
;
}
var
cs
=
this
.
_chunkSize
(
b
);
var
a
=
Math
.
pow
(
b
,
cs
);
var
d
=
_3
(
a
),
y
=
_2
(),
z
=
_2
(),
r
=
""
;
this
.
_divRemTo
(
d
,
y
,
z
);
while
(
y
.
signum
()
>
0
){
r
=
(
a
+
z
.
intValue
()).
toString
(
b
).
substr
(
1
)
+
r
;
y
.
_divRemTo
(
d
,
y
,
z
);
}
return
z
.
intValue
().
toString
(
b
)
+
r
;
};
function
_d
(
s
,
b
){
this
.
_fromInt
(
0
);
if
(
b
==
null
){
b
=
10
;
}
var
cs
=
this
.
_chunkSize
(
b
);
var
d
=
Math
.
pow
(
b
,
cs
),
mi
=
false
,
j
=
0
,
w
=
0
;
for
(
var
i
=
0
;
i
<
s
.
length
;
++
i
){
var
x
=
intAt
(
s
,
i
);
if
(
x
<
0
){
if
(
s
.
charAt
(
i
)
==
"-"
&&
this
.
signum
()
==
0
){
mi
=
true
;
}
continue
;
}
w
=
b
*
w
+
x
;
if
(
++
j
>=
cs
){
this
.
_dMultiply
(
d
);
this
.
_dAddOffset
(
w
,
0
);
j
=
0
;
w
=
0
;
}
}
if
(
j
>
0
){
this
.
_dMultiply
(
Math
.
pow
(
b
,
j
));
this
.
_dAddOffset
(
w
,
0
);
}
if
(
mi
){
_1
.
ZERO
.
_subTo
(
this
,
this
);
}
};
function
_e
(
a
,
b
,
c
){
if
(
"number"
==
typeof
b
){
if
(
a
<
2
){
this
.
_fromInt
(
1
);
}
else
{
this
.
_fromNumber
(
a
,
c
);
if
(
!
this
.
testBit
(
a
-
1
)){
this
.
_bitwiseTo
(
_1
.
ONE
.
shiftLeft
(
a
-
1
),
_f
,
this
);
}
if
(
this
.
_isEven
()){
this
.
_dAddOffset
(
1
,
0
);
}
while
(
!
this
.
isProbablePrime
(
b
)){
this
.
_dAddOffset
(
2
,
0
);
if
(
this
.
bitLength
()
>
a
){
this
.
_subTo
(
_1
.
ONE
.
shiftLeft
(
a
-
1
),
this
);
}
}
}
}
else
{
var
x
=
[],
t
=
a
&
7
;
x
.
length
=
(
a
>>
3
)
+
1
;
b
.
nextBytes
(
x
);
if
(
t
>
0
){
x
[
0
]
&=
((
1
<<
t
)
-
1
);
}
else
{
x
[
0
]
=
0
;
}
this
.
_fromString
(
x
,
256
);
}
};
function
_10
(){
var
i
=
this
.
t
,
r
=
[];
r
[
0
]
=
this
.
s
;
var
p
=
this
.
_DB
-
(
i
*
this
.
_DB
)
%
8
,
d
,
k
=
0
;
if
(
i
-->
0
){
if
(
p
<
this
.
_DB
&&
(
d
=
this
[
i
]
>>
p
)
!=
(
this
.
s
&
this
.
_DM
)
>>
p
){
r
[
k
++
]
=
d
|
(
this
.
s
<<
(
this
.
_DB
-
p
));
}
while
(
i
>=
0
){
if
(
p
<
8
){
d
=
(
this
[
i
]
&
((
1
<<
p
)
-
1
))
<<
(
8
-
p
);
d
|=
this
[
--
i
]
>>
(
p
+=
this
.
_DB
-
8
);
}
else
{
d
=
(
this
[
i
]
>>
(
p
-=
8
))
&
255
;
if
(
p
<=
0
){
p
+=
this
.
_DB
;
--
i
;
}
}
if
((
d
&
128
)
!=
0
){
d
|=-
256
;
}
if
(
k
==
0
&&
(
this
.
s
&
128
)
!=
(
d
&
128
)){
++
k
;
}
if
(
k
>
0
||
d
!=
this
.
s
){
r
[
k
++
]
=
d
;
}
}
}
return
r
;
};
function
_11
(
a
){
return
(
this
.
compareTo
(
a
)
==
0
);
};
function
_12
(
a
){
return
(
this
.
compareTo
(
a
)
<
0
)
?
this
:
a
;
};
function
_13
(
a
){
return
(
this
.
compareTo
(
a
)
>
0
)
?
this
:
a
;
};
function
_14
(
a
,
op
,
r
){
var
i
,
f
,
m
=
Math
.
min
(
a
.
t
,
this
.
t
);
for
(
i
=
0
;
i
<
m
;
++
i
){
r
[
i
]
=
op
(
this
[
i
],
a
[
i
]);
}
if
(
a
.
t
<
this
.
t
){
f
=
a
.
s
&
this
.
_DM
;
for
(
i
=
m
;
i
<
this
.
t
;
++
i
){
r
[
i
]
=
op
(
this
[
i
],
f
);
}
r
.
t
=
this
.
t
;
}
else
{
f
=
this
.
s
&
this
.
_DM
;
for
(
i
=
m
;
i
<
a
.
t
;
++
i
){
r
[
i
]
=
op
(
f
,
a
[
i
]);
}
r
.
t
=
a
.
t
;
}
r
.
s
=
op
(
this
.
s
,
a
.
s
);
r
.
_clamp
();
};
function
_15
(
x
,
y
){
return
x
&
y
;
};
function
_16
(
a
){
var
r
=
_2
();
this
.
_bitwiseTo
(
a
,
_15
,
r
);
return
r
;
};
function
_f
(
x
,
y
){
return
x
|
y
;
};
function
_17
(
a
){
var
r
=
_2
();
this
.
_bitwiseTo
(
a
,
_f
,
r
);
return
r
;
};
function
_18
(
x
,
y
){
return
x
^
y
;
};
function
_19
(
a
){
var
r
=
_2
();
this
.
_bitwiseTo
(
a
,
_18
,
r
);
return
r
;
};
function
_1a
(
x
,
y
){
return
x
&~
y
;
};
function
_1b
(
a
){
var
r
=
_2
();
this
.
_bitwiseTo
(
a
,
_1a
,
r
);
return
r
;
};
function
_1c
(){
var
r
=
_2
();
for
(
var
i
=
0
;
i
<
this
.
t
;
++
i
){
r
[
i
]
=
this
.
_DM
&~
this
[
i
];
}
r
.
t
=
this
.
t
;
r
.
s
=~
this
.
s
;
return
r
;
};
function
_1d
(
n
){
var
r
=
_2
();
if
(
n
<
0
){
this
.
_rShiftTo
(
-
n
,
r
);
}
else
{
this
.
_lShiftTo
(
n
,
r
);
}
return
r
;
};
function
_1e
(
n
){
var
r
=
_2
();
if
(
n
<
0
){
this
.
_lShiftTo
(
-
n
,
r
);
}
else
{
this
.
_rShiftTo
(
n
,
r
);
}
return
r
;
};
function
_1f
(
x
){
if
(
x
==
0
){
return
-
1
;
}
var
r
=
0
;
if
((
x
&
65535
)
==
0
){
x
>>=
16
;
r
+=
16
;
}
if
((
x
&
255
)
==
0
){
x
>>=
8
;
r
+=
8
;
}
if
((
x
&
15
)
==
0
){
x
>>=
4
;
r
+=
4
;
}
if
((
x
&
3
)
==
0
){
x
>>=
2
;
r
+=
2
;
}
if
((
x
&
1
)
==
0
){
++
r
;
}
return
r
;
};
function
_20
(){
for
(
var
i
=
0
;
i
<
this
.
t
;
++
i
){
if
(
this
[
i
]
!=
0
){
return
i
*
this
.
_DB
+
_1f
(
this
[
i
]);
}
}
if
(
this
.
s
<
0
){
return
this
.
t
*
this
.
_DB
;
}
return
-
1
;
};
function
_21
(
x
){
var
r
=
0
;
while
(
x
!=
0
){
x
&=
x
-
1
;
++
r
;
}
return
r
;
};
function
_22
(){
var
r
=
0
,
x
=
this
.
s
&
this
.
_DM
;
for
(
var
i
=
0
;
i
<
this
.
t
;
++
i
){
r
+=
_21
(
this
[
i
]
^
x
);
}
return
r
;
};
function
_23
(
n
){
var
j
=
Math
.
floor
(
n
/
this
.
_DB
);
if
(
j
>=
this
.
t
){
return
(
this
.
s
!=
0
);
}
return
((
this
[
j
]
&
(
1
<<
(
n
%
this
.
_DB
)))
!=
0
);
};
function
_24
(
n
,
op
){
var
r
=
_1
.
ONE
.
shiftLeft
(
n
);
this
.
_bitwiseTo
(
r
,
op
,
r
);
return
r
;
};
function
_25
(
n
){
return
this
.
_changeBit
(
n
,
_f
);
};
function
_26
(
n
){
return
this
.
_changeBit
(
n
,
_1a
);
};
function
_27
(
n
){
return
this
.
_changeBit
(
n
,
_18
);
};
function
_28
(
a
,
r
){
var
i
=
0
,
c
=
0
,
m
=
Math
.
min
(
a
.
t
,
this
.
t
);
while
(
i
<
m
){
c
+=
this
[
i
]
+
a
[
i
];
r
[
i
++
]
=
c
&
this
.
_DM
;
c
>>=
this
.
_DB
;
}
if
(
a
.
t
<
this
.
t
){
c
+=
a
.
s
;
while
(
i
<
this
.
t
){
c
+=
this
[
i
];
r
[
i
++
]
=
c
&
this
.
_DM
;
c
>>=
this
.
_DB
;
}
c
+=
this
.
s
;
}
else
{
c
+=
this
.
s
;
while
(
i
<
a
.
t
){
c
+=
a
[
i
];
r
[
i
++
]
=
c
&
this
.
_DM
;
c
>>=
this
.
_DB
;
}
c
+=
a
.
s
;
}
r
.
s
=
(
c
<
0
)
?-
1
:
0
;
if
(
c
>
0
){
r
[
i
++
]
=
c
;
}
else
{
if
(
c
<-
1
){
r
[
i
++
]
=
this
.
_DV
+
c
;
}
}
r
.
t
=
i
;
r
.
_clamp
();
};
function
_29
(
a
){
var
r
=
_2
();
this
.
_addTo
(
a
,
r
);
return
r
;
};
function
_2a
(
a
){
var
r
=
_2
();
this
.
_subTo
(
a
,
r
);
return
r
;
};
function
_2b
(
a
){
var
r
=
_2
();
this
.
_multiplyTo
(
a
,
r
);
return
r
;
};
function
_2c
(
a
){
var
r
=
_2
();
this
.
_divRemTo
(
a
,
r
,
null
);
return
r
;
};
function
_2d
(
a
){
var
r
=
_2
();
this
.
_divRemTo
(
a
,
null
,
r
);
return
r
;
};
function
_2e
(
a
){
var
q
=
_2
(),
r
=
_2
();
this
.
_divRemTo
(
a
,
q
,
r
);
return
[
q
,
r
];
};
function
_2f
(
n
){
this
[
this
.
t
]
=
this
.
am
(
0
,
n
-
1
,
this
,
0
,
0
,
this
.
t
);
++
this
.
t
;
this
.
_clamp
();
};
function
_30
(
n
,
w
){
while
(
this
.
t
<=
w
){
this
[
this
.
t
++
]
=
0
;
}
this
[
w
]
+=
n
;
while
(
this
[
w
]
>=
this
.
_DV
){
this
[
w
]
-=
this
.
_DV
;
if
(
++
w
>=
this
.
t
){
this
[
this
.
t
++
]
=
0
;
}
++
this
[
w
];
}
};
function
_31
(){
};
function
_32
(
x
){
return
x
;
};
function
_33
(
x
,
y
,
r
){
x
.
_multiplyTo
(
y
,
r
);
};
function
_34
(
x
,
r
){
x
.
_squareTo
(
r
);
};
_31
.
prototype
.
convert
=
_32
;
_31
.
prototype
.
revert
=
_32
;
_31
.
prototype
.
mulTo
=
_33
;
_31
.
prototype
.
sqrTo
=
_34
;
function
_35
(
e
){
return
this
.
_exp
(
e
,
new
_31
());
};
function
_36
(
a
,
n
,
r
){
var
i
=
Math
.
min
(
this
.
t
+
a
.
t
,
n
);
r
.
s
=
0
;
r
.
t
=
i
;
while
(
i
>
0
){
r
[
--
i
]
=
0
;
}
var
j
;
for
(
j
=
r
.
t
-
this
.
t
;
i
<
j
;
++
i
){
r
[
i
+
this
.
t
]
=
this
.
am
(
0
,
a
[
i
],
r
,
i
,
0
,
this
.
t
);
}
for
(
j
=
Math
.
min
(
a
.
t
,
n
);
i
<
j
;
++
i
){
this
.
am
(
0
,
a
[
i
],
r
,
i
,
0
,
n
-
i
);
}
r
.
_clamp
();
};
function
_37
(
a
,
n
,
r
){
--
n
;
var
i
=
r
.
t
=
this
.
t
+
a
.
t
-
n
;
r
.
s
=
0
;
while
(
--
i
>=
0
){
r
[
i
]
=
0
;
}
for
(
i
=
Math
.
max
(
n
-
this
.
t
,
0
);
i
<
a
.
t
;
++
i
){
r
[
this
.
t
+
i
-
n
]
=
this
.
am
(
n
-
i
,
a
[
i
],
r
,
0
,
0
,
this
.
t
+
i
-
n
);
}
r
.
_clamp
();
r
.
_drShiftTo
(
1
,
r
);
};
function
_38
(
m
){
this
.
r2
=
_2
();
this
.
q3
=
_2
();
_1
.
ONE
.
_dlShiftTo
(
2
*
m
.
t
,
this
.
r2
);
this
.
mu
=
this
.
r2
.
divide
(
m
);
this
.
m
=
m
;
};
function
_39
(
x
){
if
(
x
.
s
<
0
||
x
.
t
>
2
*
this
.
m
.
t
){
return
x
.
mod
(
this
.
m
);
}
else
{
if
(
x
.
compareTo
(
this
.
m
)
<
0
){
return
x
;
}
else
{
var
r
=
_2
();
x
.
_copyTo
(
r
);
this
.
reduce
(
r
);
return
r
;
}
}
};
function
_3a
(
x
){
return
x
;
};
function
_3b
(
x
){
x
.
_drShiftTo
(
this
.
m
.
t
-
1
,
this
.
r2
);
if
(
x
.
t
>
this
.
m
.
t
+
1
){
x
.
t
=
this
.
m
.
t
+
1
;
x
.
_clamp
();
}
this
.
mu
.
_multiplyUpperTo
(
this
.
r2
,
this
.
m
.
t
+
1
,
this
.
q3
);
this
.
m
.
_multiplyLowerTo
(
this
.
q3
,
this
.
m
.
t
+
1
,
this
.
r2
);
while
(
x
.
compareTo
(
this
.
r2
)
<
0
){
x
.
_dAddOffset
(
1
,
this
.
m
.
t
+
1
);
}
x
.
_subTo
(
this
.
r2
,
x
);
while
(
x
.
compareTo
(
this
.
m
)
>=
0
){
x
.
_subTo
(
this
.
m
,
x
);
}
};
function
_3c
(
x
,
r
){
x
.
_squareTo
(
r
);
this
.
reduce
(
r
);
};
function
_3d
(
x
,
y
,
r
){
x
.
_multiplyTo
(
y
,
r
);
this
.
reduce
(
r
);
};
_38
.
prototype
.
convert
=
_39
;
_38
.
prototype
.
revert
=
_3a
;
_38
.
prototype
.
reduce
=
_3b
;
_38
.
prototype
.
mulTo
=
_3d
;
_38
.
prototype
.
sqrTo
=
_3c
;
function
_3e
(
e
,
m
){
var
i
=
e
.
bitLength
(),
k
,
r
=
_3
(
1
),
z
;
if
(
i
<=
0
){
return
r
;
}
else
{
if
(
i
<
18
){
k
=
1
;
}
else
{
if
(
i
<
48
){
k
=
3
;
}
else
{
if
(
i
<
144
){
k
=
4
;
}
else
{
if
(
i
<
768
){
k
=
5
;
}
else
{
k
=
6
;
}
}
}
}
}
if
(
i
<
8
){
z
=
new
Classic
(
m
);
}
else
{
if
(
m
.
_isEven
()){
z
=
new
_38
(
m
);
}
else
{
z
=
new
_5
(
m
);
}
}
var
g
=
[],
n
=
3
,
k1
=
k
-
1
,
km
=
(
1
<<
k
)
-
1
;
g
[
1
]
=
z
.
convert
(
this
);
if
(
k
>
1
){
var
g2
=
_2
();
z
.
sqrTo
(
g
[
1
],
g2
);
while
(
n
<=
km
){
g
[
n
]
=
_2
();
z
.
mulTo
(
g2
,
g
[
n
-
2
],
g
[
n
]);
n
+=
2
;
}
}
var
j
=
e
.
t
-
1
,
w
,
is1
=
true
,
r2
=
_2
(),
t
;
i
=
_4
(
e
[
j
])
-
1
;
while
(
j
>=
0
){
if
(
i
>=
k1
){
w
=
(
e
[
j
]
>>
(
i
-
k1
))
&
km
;
}
else
{
w
=
(
e
[
j
]
&
((
1
<<
(
i
+
1
))
-
1
))
<<
(
k1
-
i
);
if
(
j
>
0
){
w
|=
e
[
j
-
1
]
>>
(
this
.
_DB
+
i
-
k1
);
}
}
n
=
k
;
while
((
w
&
1
)
==
0
){
w
>>=
1
;
--
n
;
}
if
((
i
-=
n
)
<
0
){
i
+=
this
.
_DB
;
--
j
;
}
if
(
is1
){
g
[
w
].
_copyTo
(
r
);
is1
=
false
;
}
else
{
while
(
n
>
1
){
z
.
sqrTo
(
r
,
r2
);
z
.
sqrTo
(
r2
,
r
);
n
-=
2
;
}
if
(
n
>
0
){
z
.
sqrTo
(
r
,
r2
);
}
else
{
t
=
r
;
r
=
r2
;
r2
=
t
;
}
z
.
mulTo
(
r2
,
g
[
w
],
r
);
}
while
(
j
>=
0
&&
(
e
[
j
]
&
(
1
<<
i
))
==
0
){
z
.
sqrTo
(
r
,
r2
);
t
=
r
;
r
=
r2
;
r2
=
t
;
if
(
--
i
<
0
){
i
=
this
.
_DB
-
1
;
--
j
;
}
}
}
return
z
.
revert
(
r
);
};
function
_3f
(
a
){
var
x
=
(
this
.
s
<
0
)
?
this
.
negate
()
:
this
.
clone
();
var
y
=
(
a
.
s
<
0
)
?
a
.
negate
()
:
a
.
clone
();
if
(
x
.
compareTo
(
y
)
<
0
){
var
t
=
x
;
x
=
y
;
y
=
t
;
}
var
i
=
x
.
getLowestSetBit
(),
g
=
y
.
getLowestSetBit
();
if
(
g
<
0
){
return
x
;
}
if
(
i
<
g
){
g
=
i
;
}
if
(
g
>
0
){
x
.
_rShiftTo
(
g
,
x
);
y
.
_rShiftTo
(
g
,
y
);
}
while
(
x
.
signum
()
>
0
){
if
((
i
=
x
.
getLowestSetBit
())
>
0
){
x
.
_rShiftTo
(
i
,
x
);
}
if
((
i
=
y
.
getLowestSetBit
())
>
0
){
y
.
_rShiftTo
(
i
,
y
);
}
if
(
x
.
compareTo
(
y
)
>=
0
){
x
.
_subTo
(
y
,
x
);
x
.
_rShiftTo
(
1
,
x
);
}
else
{
y
.
_subTo
(
x
,
y
);
y
.
_rShiftTo
(
1
,
y
);
}
}
if
(
g
>
0
){
y
.
_lShiftTo
(
g
,
y
);
}
return
y
;
};
function
_40
(
n
){
if
(
n
<=
0
){
return
0
;
}
var
d
=
this
.
_DV
%
n
,
r
=
(
this
.
s
<
0
)
?
n
-
1
:
0
;
if
(
this
.
t
>
0
){
if
(
d
==
0
){
r
=
this
[
0
]
%
n
;
}
else
{
for
(
var
i
=
this
.
t
-
1
;
i
>=
0
;
--
i
){
r
=
(
d
*
r
+
this
[
i
])
%
n
;
}
}
}
return
r
;
};
function
_41
(
m
){
var
ac
=
m
.
_isEven
();
if
((
this
.
_isEven
()
&&
ac
)
||
m
.
signum
()
==
0
){
return
_1
.
ZERO
;
}
var
u
=
m
.
clone
(),
v
=
this
.
clone
();
var
a
=
_3
(
1
),
b
=
_3
(
0
),
c
=
_3
(
0
),
d
=
_3
(
1
);
while
(
u
.
signum
()
!=
0
){
while
(
u
.
_isEven
()){
u
.
_rShiftTo
(
1
,
u
);
if
(
ac
){
if
(
!
a
.
_isEven
()
||!
b
.
_isEven
()){
a
.
_addTo
(
this
,
a
);
b
.
_subTo
(
m
,
b
);
}
a
.
_rShiftTo
(
1
,
a
);
}
else
{
if
(
!
b
.
_isEven
()){
b
.
_subTo
(
m
,
b
);
}
}
b
.
_rShiftTo
(
1
,
b
);
}
while
(
v
.
_isEven
()){
v
.
_rShiftTo
(
1
,
v
);
if
(
ac
){
if
(
!
c
.
_isEven
()
||!
d
.
_isEven
()){
c
.
_addTo
(
this
,
c
);
d
.
_subTo
(
m
,
d
);
}
c
.
_rShiftTo
(
1
,
c
);
}
else
{
if
(
!
d
.
_isEven
()){
d
.
_subTo
(
m
,
d
);
}
}
d
.
_rShiftTo
(
1
,
d
);
}
if
(
u
.
compareTo
(
v
)
>=
0
){
u
.
_subTo
(
v
,
u
);
if
(
ac
){
a
.
_subTo
(
c
,
a
);
}
b
.
_subTo
(
d
,
b
);
}
else
{
v
.
_subTo
(
u
,
v
);
if
(
ac
){
c
.
_subTo
(
a
,
c
);
}
d
.
_subTo
(
b
,
d
);
}
}
if
(
v
.
compareTo
(
_1
.
ONE
)
!=
0
){
return
_1
.
ZERO
;
}
if
(
d
.
compareTo
(
m
)
>=
0
){
return
d
.
subtract
(
m
);
}
if
(
d
.
signum
()
<
0
){
d
.
_addTo
(
m
,
d
);
}
else
{
return
d
;
}
if
(
d
.
signum
()
<
0
){
return
d
.
add
(
m
);
}
else
{
return
d
;
}
};
var
_42
=
[
2
,
3
,
5
,
7
,
11
,
13
,
17
,
19
,
23
,
29
,
31
,
37
,
41
,
43
,
47
,
53
,
59
,
61
,
67
,
71
,
73
,
79
,
83
,
89
,
97
,
101
,
103
,
107
,
109
,
113
,
127
,
131
,
137
,
139
,
149
,
151
,
157
,
163
,
167
,
173
,
179
,
181
,
191
,
193
,
197
,
199
,
211
,
223
,
227
,
229
,
233
,
239
,
241
,
251
,
257
,
263
,
269
,
271
,
277
,
281
,
283
,
293
,
307
,
311
,
313
,
317
,
331
,
337
,
347
,
349
,
353
,
359
,
367
,
373
,
379
,
383
,
389
,
397
,
401
,
409
,
419
,
421
,
431
,
433
,
439
,
443
,
449
,
457
,
461
,
463
,
467
,
479
,
487
,
491
,
499
,
503
,
509
];
var
_43
=
(
1
<<
26
)
/
_42
[
_42
.
length
-
1
];
function
_44
(
t
){
var
i
,
x
=
this
.
abs
();
if
(
x
.
t
==
1
&&
x
[
0
]
<=
_42
[
_42
.
length
-
1
]){
for
(
i
=
0
;
i
<
_42
.
length
;
++
i
){
if
(
x
[
0
]
==
_42
[
i
]){
return
true
;
}
}
return
false
;
}
if
(
x
.
_isEven
()){
return
false
;
}
i
=
1
;
while
(
i
<
_42
.
length
){
var
m
=
_42
[
i
],
j
=
i
+
1
;
while
(
j
<
_42
.
length
&&
m
<
_43
){
m
*=
_42
[
j
++
];
}
m
=
x
.
_modInt
(
m
);
while
(
i
<
j
){
if
(
m
%
_42
[
i
++
]
==
0
){
return
false
;
}
}
}
return
x
.
_millerRabin
(
t
);
};
function
_45
(
t
){
var
n1
=
this
.
subtract
(
_1
.
ONE
);
var
k
=
n1
.
getLowestSetBit
();
if
(
k
<=
0
){
return
false
;
}
var
r
=
n1
.
shiftRight
(
k
);
t
=
(
t
+
1
)
>>
1
;
if
(
t
>
_42
.
length
){
t
=
_42
.
length
;
}
var
a
=
_2
();
for
(
var
i
=
0
;
i
<
t
;
++
i
){
a
.
_fromInt
(
_42
[
i
]);
var
y
=
a
.
modPow
(
r
,
this
);
if
(
y
.
compareTo
(
_1
.
ONE
)
!=
0
&&
y
.
compareTo
(
n1
)
!=
0
){
var
j
=
1
;
while
(
j
++<
k
&&
y
.
compareTo
(
n1
)
!=
0
){
y
=
y
.
modPowInt
(
2
,
this
);
if
(
y
.
compareTo
(
_1
.
ONE
)
==
0
){
return
false
;
}
}
if
(
y
.
compareTo
(
n1
)
!=
0
){
return
false
;
}
}
}
return
true
;
};
dojo
.
extend
(
_1
,{
_chunkSize
:
_a
,
_toRadix
:
_c
,
_fromRadix
:
_d
,
_fromNumber
:
_e
,
_bitwiseTo
:
_14
,
_changeBit
:
_24
,
_addTo
:
_28
,
_dMultiply
:
_2f
,
_dAddOffset
:
_30
,
_multiplyLowerTo
:
_36
,
_multiplyUpperTo
:
_37
,
_modInt
:
_40
,
_millerRabin
:
_45
,
clone
:
_6
,
intValue
:
_7
,
byteValue
:
_8
,
shortValue
:
_9
,
signum
:
_b
,
toByteArray
:
_10
,
equals
:
_11
,
min
:
_12
,
max
:
_13
,
and
:
_16
,
or
:
_17
,
xor
:
_19
,
andNot
:
_1b
,
not
:
_1c
,
shiftLeft
:
_1d
,
shiftRight
:
_1e
,
getLowestSetBit
:
_20
,
bitCount
:
_22
,
testBit
:
_23
,
setBit
:
_25
,
clearBit
:
_26
,
flipBit
:
_27
,
add
:
_29
,
subtract
:
_2a
,
multiply
:
_2b
,
divide
:
_2c
,
remainder
:
_2d
,
divideAndRemainder
:
_2e
,
modPow
:
_3e
,
modInverse
:
_41
,
pow
:
_35
,
gcd
:
_3f
,
isProbablePrime
:
_44
});
})();
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Apr 26, 12:33 (1 d, 7 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
24725
Default Alt Text
BigInteger-ext.js (11 KB)
Attached To
rZED Zed
Event Timeline
Log In to Comment