青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運(yùn)轉(zhuǎn),開心的工作
簡單、開放、平等的公司文化;尊重個性、自由與個人價(jià)值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

Flash AS3 封裝的 BigInt

Posted on 2009-12-14 15:03 S.l.e!ep.¢% 閱讀(1077) 評論(0)  編輯 收藏 引用 所屬分類: Flash
/* *
?*?BigInt
?*?An?ActionScript?3?implementation?of?Big?Integer?(light?version)
?*?Copyright?(c)?2009?Alex.li
?*?
?*?Derived?from:?
?*?????????BigInt.js?-?Arbitrary?size?integer?math?package?for?JavaScript
?*?????????Copyright?(C)?2000?Masanao?Izumo?<iz@onicos.co.jp>
?*?
?*?Interfaces:
?*?var?x:BigInt?=?new?BigInt("1234567890123456789012345678901234567890");
?*?var?y:BigInt?=?new?BigInt("0x123456789abcdef0123456789abcdef0");
?*?var?z:BigInt?=?x.clone();
?*?z?=?x.negative();
?*?z?=?BigInt.plus(x,?y);
?*?z?=?BigInt.minus(x,?y);
?*?z?=?BigInt.multiply(x,?y);
?*?z?=?BigInt.divide(x,?y);
?*?z?=?BigInt.mod(x,?y);????
?*?var?compare:int?=?BigInt.compare(x,?y);?//return?-1,?0,?or?1
?*?var?num:Number?=?x.toNumber();?//convert?to?normal?number?
?
*/

package
{????
????
public ? class ?BigInt
????{
????????
// sign?of?BigInt,?negative?or?not
???????? private ?var?_sign:Boolean;
????????
// length?of?BigInt
???????? private ?var?_len: int ;
????????
// digits?of?BigInt
???????? private ?var?_digits:Array;
????????
????????
public ?function?BigInt(arg)
????????{
????????????var?i:
* ,?x: * ,?need_init:Boolean;

????????????
if ?(arg.length? == ? 0 )?
????????????{
????????????????_sign?
= ? true ;
????????????????_len?
= ? 1 ;
????????????????_digits?
= ? new ?Array( 1 );
????????????????need_init?
= ? true ;????????????
????????????}?
else ? if ?(arg.length? == ? 1 )?
????????????{
????????????????x?
= ?getBigIntFromAny(arg[ 0 ]);
????????????????
if ?(x? == ?arg[ 0 ])?x? = ?x.clone();????????????????
????????????????_sign?
= ?x._sign;
????????????????_len?
= ?x._len;
????????????????_digits?
= ?x._digits;
????????????????need_init?
= ? false ;????????????
????????????}?
else ?
????????????{
????????????????_sign?
= ?(arg[ 1 ]? ? ? true ?:? false );
????????????????_len?
= ?arg[ 0 ];
????????????????_digits?
= ? new ?Array(_len);
????????????????need_init?
= ? true ;
????????????}

????????????
if ?(need_init)?
????????????{
????????????????
for (i? = ? 0 ;?i? < ?_len;?i ++ )
????????????????_digits[i]?
= ? 0 ;
????????????}
????????}
????????
????????
public ?function?toString():String
????????{
????????????
return ? this .toStringBase( 10 );
????????}
????????
????????
public ?function?toStringBase( base : int ):String
????????{
????????????var?i:
* ,?j: * ,?hbase: * ;
????????????var?t:
* ;
????????????var?ds:
* ;
????????????var?c:
* ;

????????????i?
= ? this ._len;
????????????
if ?(i? == ? 0 )? return ? " 0 " ;
????????????
if ?(i? == ? 1 ? && ? ! this ._digits[ 0 ])? return ? " 0 " ;

????????????
switch ( base )?{
??????????????
default :
??????????????
case ? 10 :
??????????????j?
= ?Math.floor(( 2 * 8 * i * 241 ) / 800 ) + 2 ;
??????????????hbase?
= ? 10000 ;
??????????????
break ;

??????????????
case ? 16 :
??????????????j?
= ?Math.floor(( 2 * 8 * i) / 4 ) + 2 ;
??????????????hbase?
= ? 0x10000 ;
??????????????
break ;

??????????????
case ? 8 :
??????????????j?
= ?( 2 * 8 * i) + 2 ;
??????????????hbase?
= ? 010000 ;
??????????????
break ;

??????????????
case ? 2 :
??????????????j?
= ?( 2 * 8 * i) + 2 ;
??????????????hbase?
= ? 020 ;
??????????????
break ;
????????????}

????????????t?
= ? this .clone();
????????????ds?
= ?t._digits;
????????????var?s:String?
= ? "" ;

????????????
while ?(i? && ?j)?
????????????{
????????????????var?k:
* ? = ?i;
????????????????var?num:
* ? = ? 0 ;

????????????????
while ?(k -- )?
????????????????{
????????????????????num?
= ?(num << 16 )? + ?ds[k];
????????????????????
if (num? < ? 0 )?num? += ? 4294967296 ;
????????????????????ds[k]?
= ?Math.floor(num? / ?hbase);
????????????????????num?
%= ?hbase;
????????????????}

????????????????
if ?(ds[i - 1 ]? == ? 0 )
????????????????i
-- ;
????????????????k?
= ? 4 ;
????????????????
while ?(k -- )?
????????????????{
????????????????????c?
= ?(num? % ? base );
????????????????????s?
= ? " 0123456789abcdef " .charAt(c)? + ?s;
????????????????????
-- j;
????????????????????num?
= ?Math.floor(num? / ? base );
????????????????????
if ?(i? == ? 0 ? && ?num? == ? 0 )?
????????????????????{
????????????????????????
break ;
????????????????????}
????????????????}
????????????}

????????????i?
= ? 0 ;
????????????
while (i? < ?s.length? && ?s.charAt(i)? == ? " 0 " )
????????????i
++ ;
????????????
if (i)
????????????s?
= ?s.substring(i,?s.length);
????????????
if ( ! this ._sign)
????????????s?
= ? " - " ? + ?s;????????????
????????????
return ?s;
????????}
????????
????????
public ?function?clone():BigInt
????????{
????????????var?x:BigInt,?i:
int ;

????????????x?
= ? new ?BigInt( this ._len,? this ._sign);
????????????
for ?(i? = ? 0 ;?i? < ? this ._len;?i ++ )
????????????{
????????????????x._digits[i]?
= ? this ._digits[i];?
????????????}????????????
????????????
return ?x;
????????}????????
????????
????????
/* *
?????????*?become?a?negative?BigInt
?????????*?@return
?????????
*/
????????
public ?function?negative():BigInt
????????{
??????????var?n:BigInt?
= ? this .clone();
??????????n._sign?
= ? ! n._sign;
??????????
return ?normalize(n);
????????}????????
????????
????????
public ?function?toNumber():Number
????????{
????????????var?d:
* ? = ? 0.0 ;
????????????var?i:
* ? = ?_len;
????????????var?ds:
* ? = ?_digits;

????????????
while ?(i -- )?
????????????{
????????????????d?
= ?ds[i]? + ? 65536.0 ? * ?d;
????????????}
????????????
if ?( ! _sign)?d? = ? - d;
????????????
return ?d;
????????}
????????
????????
public ?function? get ?sign():Boolean?
????????{?
????????????
return ?_sign;?
????????}
????????
????????
public ?function? get ?length(): int ?
????????{?
????????????
return ?_len;?
????????}
????????
????????
public ?function? get ?digits():Array?
????????{?
????????????
return ?_digits;?
????????}????
????????
????????
????????
/* ************??public?static?methods??************* */
????????
????????
????????
public ? static ?function?plus(x: * ,?y: * ):BigInt
????????{
????????????x?
= ?getBigIntFromAny(x);
????????????y?
= ?getBigIntFromAny(y);
????????????
return ?add(x,?y,? 1 );
????????}
????????
????????
public ? static ?function?minus(x: * ,?y: * ):BigInt
????????{
????????????x?
= ?getBigIntFromAny(x);
????????????y?
= ?getBigIntFromAny(y);
????????????
return ?add(x,?y,? 0 );
????????}????????
????????
????????
public ? static ?function?multiply(x: * ,?y: * ):BigInt
????????{
????????????var?i:
* ,?j: * ;
????????????var?n:
* ? = ? 0 ;
????????????var?z:
* ;
????????????var?zds:
* ,?xds: * ,?yds: * ;
????????????var?dd:
* ,?ee: * ;
????????????var?ylen:
* ;

????????????x?
= ?getBigIntFromAny(x);
????????????y?
= ?getBigIntFromAny(y);

????????????j?
= ?x._len? + ?y._len? + ? 1 ;
????????????z?
= ? new ?BigInt(j,?x._sign? == ?y._sign);

????????????xds?
= ?x._digits;
????????????yds?
= ?y._digits;
????????????zds?
= ?z._digits;
????????????ylen?
= ?y._len;
????????????
????????????
while ?(j -- )?zds[j]? = ? 0 ;
????????????
for ?(i? = ? 0 ;?i? < ?x._len;?i ++ )?
????????????{
????????????????dd?
= ?xds[i];?
????????????????
if ?(dd? == ? 0 )? continue ;
????????????????n?
= ? 0 ;
????????????????
for ?(j? = ? 0 ;?j? < ?ylen;?j ++ )?
????????????????{
????????????????????ee?
= ?n? + ?dd? * ?yds[j];
????????????????????n?
= ?zds[i? + ?j]? + ?ee;
????????????????????
if ?(ee)?zds[i? + ?j]? = ?(n? & ? 0xffff );
????????????????????n?
>>>= ? 16 ;
????????????????}
????????????????
if ?(n)?
????????????????{
????????????????????zds[i?
+ ?j]? = ?n;
????????????????}
????????????}
????????????
return ?normalize(z);
????????}????????
????????
????????
public ? static ?function?divide(x: * ,?y: * ):BigInt
????????{
????????????x?
= ?getBigIntFromAny(x);
????????????y?
= ?getBigIntFromAny(y);
????????????
return ?divideAndMod(x,?y,? 0 );
????????}
????????
????????
public ? static ?function?mod(x: * ,?y: * ):BigInt
????????{
????????????x?
= ?getBigIntFromAny(x);
????????????y?
= ?getBigIntFromAny(y);
????????????
return ?divideAndMod(x,?y,? 1 );
????????}
????????
????????
/* *
?????????*?compare?two?BigInts,?if??x=y?return?0,?if?x>y?return?1,?if?x<y?return?-1.
?????????*?@param????x
?????????*?@param????y
?????????*?@return
?????????
*/
????????
public ? static ?function?compare(x: * ,?y: * ): int
????????{
????????????var?xlen:
* ;

????????????
if ?(x? == ?y)? return ? 0 ;

????????????x?
= ?getBigIntFromAny(x);
????????????y?
= ?getBigIntFromAny(y);
????????????xlen?
= ?x._len;

????????????
if ?(x._sign? != ?y._sign)?
????????????{
????????????????
if ?(x._sign)? return ? 1 ;
????????????????
return ? - 1 ;
????????????}

????????????
if ?(xlen? < ?y._len)? return ?(x._sign)? ? ? - 1 ?:? 1 ;
????????????
if ?(xlen? > ?y._len)? return ?(x._sign)? ? ? 1 ?:? - 1 ;

????????????
while ?(xlen -- ? && ?(x._digits[xlen]? == ?y._digits[xlen]));
????????????
if ?(? - 1 ? == ?xlen)? return ? 0 ;
????????????
????????????
return ?(x._digits[xlen]? > ?y._digits[xlen])? ?
????????????(x._sign?
? ? 1 ?:? - 1 )?:
????????????(x._sign?
? ? - 1 ?:? 1 );
????????}
????????
????????
????????
/* ************??private?static?methods??************* */
????????
????????
????????
private ? static ?function?getBigIntFromAny(x: * ):BigInt
????????{????????????
????????????
if ?( typeof (x)? == ? " object " )?
????????????{
????????????????
if ?(x? is ?BigInt)? return ?x;
????????????????
return ? new ?BigInt( 1 ,? 1 );
????????????}
????????????
????????????
if ?( typeof (x)? == ? " string " )?
????????????{
????????????????
????????????????
return ?getBigIntFromString(x);
????????????}
????????????
????????????
if ?( typeof (x)? == ? " number " )?
????????????{????????????????
????????????????var?i:
* ,?x1: * ,?x2: * ,?fpt: * ,?np: * ;
????????????????
????????????????
if ?(? - 2147483647 ? <= ?x? && ?x? <= ? 2147483647 )?
????????????????{
????????????????????
return ?getBigIntFromInt(x);
????????????????}
????????????????x?
= ?x? + ? "" ;
????????????????i?
= ?x.indexOf( " e " ,? 0 );
????????????????
if ?(i? == ? - 1 )? return ?getBigIntFromString(x);
????????????????x1?
= ?x.substr( 0 ,?i);
????????????????x2?
= ?x.substr(i? + ? 2 ,?x.length? - ?(i? + ? 2 ));

????????????????fpt?
= ?x1.indexOf( " . " ,? 0 );
????????????????
if ?(fpt? != ? - 1 )?
????????????????{
????????????????????np?
= ?x1.length? - ?(fpt? + ? 1 );
????????????????????x1?
= ?x1.substr( 0 ,?fpt)? + ?x1.substr(fpt? + ? 1 ,?np);
????????????????????x2?
= ?parseInt(x2)? - ?np;
????????????????}?
else ?
????????????????{
????????????????????x2?
= ?parseInt(x2);
????????????????}
????????????????
while ?(x2 -- ? > ? 0 )?
????????????????{
????????????????????x1?
+= ? " 0 " ;
????????????????}
????????????????
return ?getBigIntFromString(x1);
????????????}
????????????
return ? new ?BigInt( 1 ,? 1 );
????????}????
????????
????????
private ? static ?function?getBigIntFromInt(n:Number):BigInt
????????{
????????????var?sign:
* ,?big:BigInt,?i: * ;
????????????
????????????
if ?(n? < ? 0 )?
????????????{
????????????????n?
= ? - n;
????????????????sign?
= ? false ;
????????????}?
else
????????????{????????????????
????????????????sign?
= ? true ;????????????????
????????????}
????????????n?
&= ? 0x7FFFFFFF ;
????????????
????????????
if ?(n? <= ? 0xFFFF )?
????????????{
????????????????big?
= ? new ?BigInt( 1 ,? 1 );
????????????????big._digits[
0 ]? = ?n;
????????????}?
else
????????????{????????????????
????????????????big?
= ? new ?BigInt( 2 ,? 1 );????????????????
????????????????big._digits[
0 ]? = ?(n? & ? 0xffff );
????????????????big._digits[
1 ]? = ?((n? >> ? 16 )? & ? 0xffff );
????????????}
????????????
return ?big;
????????}
????????
????????
private ? static ?function?getBigIntFromString(str:String,? base : * ? = ? null ):BigInt
????????{
????????????var?str_i:
* ;
????????????var?sign:Boolean?
= ? true ;
????????????var?c:
* ;
????????????var?len:
* ;
????????????var?z:
* ;
????????????var?zds:
* ;
????????????var?num:
* ;
????????????var?i:
* ;
????????????var?blen:
* ? = ? 1 ;

????????????str?
+= ? " @ " ;
????????????str_i?
= ? 0 ;

????????????
if ?(str.charAt(str_i)? == ? " + " )?
????????????{
????????????????str_i
++ ;
????????????}
else ? if ?(str.charAt(str_i)? == ? " - " )?
????????????{
????????????????str_i
++ ;
????????????????sign?
= ? false ;
????????????}

????????????
if ?(str.charAt(str_i)? == ? " @ " )
????????????????
return ? null ;

????????????
if ?( ! base )?
????????????{
????????????????
if ?(str.charAt(str_i)? == ? " 0 " )
????????????????{
????????????????????c?
= ?str.charAt(str_i? + ? 1 );
????????????????????
if ?(c? == ? " x " ? || ?c? == ? " X " )?
????????????????????{
????????????????????????
base ? = ? 16 ;
????????????????????}
else ? if ?(c == ? " b " ? || ?c? == ? " B " )?
????????????????????{
????????????????????????
base ? = ? 2 ;
????????????????????}
else ?
????????????????????{
????????????????????????
base ? = ? 8 ;
????????????????????}
????????????????}
else ?
????????????????{
????????????????????
base ? = ? 10 ;
????????????????}
????????????}

????????????
if ?( base ? == ? 8 )?
????????????{
????????????????
while ?(str.charAt(str_i)? == ? " 0 " )
????????????????str_i
++ ;
????????????????len?
= ? 3 ? * ?(str.length? - ?str_i);
????????????}
else ?
????????????{
????????????????
if ?( base ? == ? 16 ? && ?str.charAt(str_i)? == ? ' 0 ' ? && ?(str.charAt(str_i? + ? 1 )? == ? " x " ? || ?str.charAt(str_i? + ? 1 )? == ? " X " ))?
????????????????{
????????????????????str_i?
+= ? 2 ;
????????????????}
????????????????
if ?( base ? == ? 2 ? && ?str.charAt(str_i)? == ? ' 0 ' ? && ?(str.charAt(str_i? + ? 1 )? == ? " b " ? || ?str.charAt(str_i? + ? 1 )? == ? " B " ))?
????????????????{
????????????????????str_i?
+= ? 2 ;
????????????????}
????????????????
while ?(str.charAt(str_i)? == ? " 0 " )
????????????????str_i
++ ;
????????????????
if ?(str.charAt(str_i)? == ? " @ " )?str_i -- ;
????????????????len?
= ? 4 ? * ?(str.length? - ?str_i);
????????????}

????????????len?
= ?(len? >> ? 4 )? + ? 1 ;
????????????z?
= ? new ?BigInt(len,?sign);
????????????zds?
= ?z._digits;

????????????
while ?( true )?
????????????{
????????????????c?
= ?str.charAt(str_i ++ );
????????????????
if (c? == ? " @ " )
????????????????
break ;
????????????????
switch ?(c)?
????????????????{
????????????????????
case ? ' 0 ' :?c? = ? 0 ;? break ;
????????????????????
case ? ' 1 ' :?c? = ? 1 ;? break ;
????????????????????
case ? ' 2 ' :?c? = ? 2 ;? break ;
????????????????????
case ? ' 3 ' :?c? = ? 3 ;? break ;
????????????????????
case ? ' 4 ' :?c? = ? 4 ;? break ;
????????????????????
case ? ' 5 ' :?c? = ? 5 ;? break ;
????????????????????
case ? ' 6 ' :?c? = ? 6 ;? break ;
????????????????????
case ? ' 7 ' :?c? = ? 7 ;? break ;
????????????????????
case ? ' 8 ' :?c? = ? 8 ;? break ;
????????????????????
case ? ' 9 ' :?c? = ? 9 ;? break ;
????????????????????
case ? ' a ' :? case ? ' A ' :?c? = ? 10 ;? break ;
????????????????????
case ? ' b ' :? case ? ' B ' :?c? = ? 11 ;? break ;
????????????????????
case ? ' c ' :? case ? ' C ' :?c? = ? 12 ;? break ;
????????????????????
case ? ' d ' :? case ? ' D ' :?c? = ? 13 ;? break ;
????????????????????
case ? ' e ' :? case ? ' E ' :?c? = ? 14 ;? break ;
????????????????????
case ? ' f ' :? case ? ' F ' :?c? = ? 15 ;? break ;
????????????????????
default :
????????????????????c?
= ? base ;
????????????????????
break ;
????????????????}
????????????????
if ?(c? >= ? base )? break ;

????????????????i?
= ? 0 ;
????????????????num?
= ?c;
????????????????
while ?( true )?
????????????????{
????????????????????
while ?(i? < ?blen)?
????????????????????{
????????????????????????num?
+= ?zds[i] * base ;
????????????????????????zds[i
++ ]? = ?(num? & ? 0xffff );
????????????????????????num?
>>>= ? 16 ;
????????????????????}
????????????????????
if ?(num)?
????????????????????{
????????????????????????blen
++ ;
????????????????????????
continue ;
????????????????????}
????????????????????
break ;
????????????????}
????????????}
????????????
return ?normalize(z);
????????}????????????
????????
????????
private ? static ?function?add(x:BigInt,?y:BigInt,?sign: * ):BigInt
????????{
????????????var?z:
* ;
????????????var?num:
* ;
????????????var?i:
* ,?len: * ;

????????????sign?
= ?(sign? == ?y._sign);
????????????
if ?(x._sign? != ?sign)?
????????????{
????????????????
if ?(sign)? return ?subtract(y,?x);
????????????????
return ?subtract(x,?y);
????????????}

????????????
if ?(x._len? > ?y._len)?
????????????{
????????????????len?
= ?x._len? + ? 1 ;
????????????????z?
= ?x;?x? = ?y;?y? = ?z;
????????????}?
else ?
????????????{
????????????????len?
= ?y._len? + ? 1 ;
????????????}
????????????z?
= ? new ?BigInt(len,?sign);

????????????len?
= ?x._len;
????????????
for ?(i? = ? 0 ,?num? = ? 0 ;?i? < ?len;?i ++ )?
????????????{
????????????????num?
+= ?x._digits[i]? + ?y._digits[i];
????????????????z._digits[i]?
= ?(num? & ? 0xffff );
????????????????num?
>>>= ? 16 ;
????????????}
????????????len?
= ?y._len;
????????????
while ?(num? && ?i? < ?len)?
????????????{
????????????????num?
+= ?y._digits[i];
????????????????z._digits[i
++ ]? = ?(num? & ? 0xffff );
????????????????num?
>>>= ? 16 ;
????????????}
????????????
while ?(i? < ?len)?
????????????{
????????????????z._digits[i]?
= ?y._digits[i];
????????????????i
++ ;
????????????}
????????????z._digits[i]?
= ?(num? & ? 0xffff );
????????????
return ?normalize(z);
????????}
????????
????????
private ? static ?function?subtract(x:BigInt,?y:BigInt):BigInt
????????{
????????????var?z:
* ? = ? 0 ;
????????????var?zds:
* ;
????????????var?num:
* ;
????????????var?i:
* ;

????????????i?
= ?x._len;
????????????
if ?(x._len? < ?y._len)?
????????????{
????????????????z?
= ?x;?x? = ?y;?y? = ?z;
????????????}
else ? if ?(x._len? == ?y._len)?
????????????{
????????????????
while ?(i? > ? 0 )?
????????????????{
????????????????????i
-- ;
????????????????????
if ?(x._digits[i]? > ?y._digits[i])?
????????????????????{
????????????????????????
break ;
????????????????????}
????????????????????
if ?(x._digits[i]? < ?y._digits[i])?
????????????????????{
????????????????????????z?
= ?x;?x? = ?y;?y? = ?z;
????????????????????????
break ;
????????????????????}
????????????????}
????????????}

????????????z?
= ? new ?BigInt(x._len,?(z? == ? 0 )? ? ? 1 ?:? 0 );
????????????zds?
= ?z._digits;

????????????
for ?(i? = ? 0 ,?num? = ? 0 ;?i? < ?y._len;?i ++ )?
????????????{?
????????????????num?
+= ?x._digits[i]? - ?y._digits[i];
????????????????zds[i]?
= ?(num? & ? 0xffff );
????????????????num?
>>>= ? 16 ;
????????????}?
????????????
while ?(num? && ?i? < ?x._len)?
????????????{
????????????????num?
+= ?x._digits[i];
????????????????zds[i
++ ]? = ?(num? & ? 0xffff );
????????????????num?
>>>= ? 16 ;
????????????}
????????????
while ?(i? < ?x._len)?
????????????{
????????????????zds[i]?
= ?x._digits[i];
????????????????i
++ ;
????????????}????????????
????????????
return ?normalize(z);
????????}
????????
????????
private ? static ?function?divideAndMod(x:BigInt,?y:BigInt,?modulo: * ):BigInt
????????{
????????????var?nx:
* ? = ?x._len;
????????????var?ny:
* ? = ?y._len;
????????????var?i:
* ,?j: * ;
????????????var?yy:
* ,?z: * ;
????????????var?xds:
* ,?yds: * ,?zds: * ,?tds: * ;
????????????var?t2:
* ;
????????????var?num:
* ;
????????????var?dd:
* ,?q: * ;
????????????var?ee:
* ;
????????????var?mod:
* ,?div: * ;

????????????yds?
= ?y._digits;
????????????
if ?(ny? == ? 0 ? && ?yds[ 0 ]? == ? 0 )? return ? null ;

????????????
if ?(nx? < ?ny? || ?nx? == ?ny? && ?x._digits[nx? - ? 1 ]? < ?y._digits[ny? - ? 1 ])?
????????????{
????????????????
if ?(modulo)? return ?normalize(x);
????????????????
return ? new ?BigIt( 1 ,? 1 );
????????????}

????????????xds?
= ?x._digits;
????????????
if ?(ny? == ? 1 )?
????????????{
????????????????dd?
= ?yds[ 0 ];
????????????????z?
= ?x.clone();
????????????????zds?
= ?z._digits;
????????????????t2?
= ? 0 ;
????????????????i?
= ?nx;
????????????????
while ?(i -- )?
????????????????{
????????????????????t2?
= ?t2? * ? 65536 ? + ?zds[i];
????????????????????zds[i]?
= ?(t2? / ?dd)? & ? 0xffff ;
????????????????????t2?
%= ?dd;
????????????????}
????????????????z._sign?
= ?(x._sign? == ?y._sign);
????????????????
if ?(modulo)
????????????????{
????????????????????
if ?( ! x._sign)?t2? = ? - t2;
????????????????????
if ?(x._sign? != ?y._sign)
????????????????????{
????????????????????????t2?
= ?t2? + ?yds[ 0 ]? * ?(y._sign? ? ? 1 ?:? - 1 );
????????????????????}
????????????????????
return ?getBigIntFromInt(t2);
????????????????}
????????????????
return ?normalize(z);
????????????}

????????????z?
= ? new ?BigInt(nx? == ?ny? ? ?nx? + ? 2 ?:?nx? + ? 1 ,?x._sign? == ?y._sign);
????????????zds?
= ?z._digits;
????????????
if ?(nx? == ?ny)?zds[nx? + ? 1 ]? = ? 0 ;
????????????
while ?( ! yds[ny? - ? 1 ])?ny -- ;
????????????
if ?((dd? = ?(( 65536 ? / ?(yds[ny? - ? 1 ]? + ? 1 ))? & ? 0xffff ))? != ? 1 )?
????????????{
????????????????yy?
= ?y.clone();
????????????????tds?
= ?yy._digits;
????????????????j?
= ? 0 ;
????????????????num?
= ? 0 ;
????????????????
while ?(j? < ?ny)?
????????????????{
????????????????????num?
+= ?yds[j]? * ?dd;
????????????????????tds[j
++ ]? = ?num? & ? 0xffff ;
????????????????????num?
>>= ? 16 ;
????????????????}
????????????????yds?
= ?tds;
????????????????j?
= ? 0 ;
????????????????num?
= ? 0 ;
????????????????
while ?(j? < ?nx)?
????????????????{
????????????????????num?
+= ?xds[j]? * ?dd;
????????????????????zds[j
++ ]? = ?num? & ? 0xffff ;
????????????????????num?
>>= ? 16 ;
????????????????}
????????????????zds[j]?
= ?num? & ? 0xffff ;
????????????}
else ?
????????????{
????????????????zds[nx]?
= ? 0 ;
????????????????j?
= ?nx;
????????????????
while ?(j -- )?zds[j]? = ?xds[j];
????????????}
????????????j?
= ?nx? == ?ny? ? ?nx? + ? 1 ?:?nx;
????????????
????????????
do ?
????????????{
????????????????
if ?(zds[j]? == ??yds[ny? - ? 1 ])?q? = ? 65535 ;
????????????????
else ?q? = ?((zds[j]? * ? 65536 ? + ?zds[j? - ? 1 ])? / ?yds[ny? - ? 1 ])? & ? 0xffff ;
????????????????
if ?(q)?
????????????????{
????????????????????i?
= ? 0 ;?num? = ? 0 ;?t2? = ? 0 ;
????????????????????
do ?
????????????????????{
????????????????????????t2?
+= ?yds[i]? * ?q;
????????????????????????ee?
= ?num? - ?(t2? & ? 0xffff );
????????????????????????num?
= ?zds[j? - ?ny? + ?i]? + ?ee;
????????????????????????
if ?(ee)?zds[j? - ?ny? + ?i]? = ?num? & ? 0xffff ;
????????????????????????num?
>>= ? 16 ;
????????????????????????t2?
>>>= ? 16 ;
????????????????????}?
while ?( ++ i? < ?ny);
????????????????????
????????????????????num?
+= ?zds[j? - ?ny? + ?i]? - ?t2;
????????????????????
while ?(num)?
????????????????????{
????????????????????????i?
= ? 0 ;?num? = ? 0 ;?q -- ;
????????????????????????
do ?
????????????????????????{
????????????????????????????ee?
= ?num? + ?yds[i];
????????????????????????????num?
= ?zds[j? - ?ny? + ?i]? + ?ee;
????????????????????????????
if ?(ee)?zds[j? - ?ny? + ?i]? = ?num? & ? 0xffff ;
????????????????????????????num?
>>= ? 16 ;
????????????????????????}?
while ?( ++ i? < ?ny);
????????????????????????num
-- ;
????????????????????}
????????????????}
????????????????zds[j]?
= ?q;
????????????}?
while ?( -- j? >= ?ny);

????????????
if ?(modulo)?
????????????{
????????????????mod?
= ?z.clone();
????????????????
if ?(dd)?
????????????????{
????????????????????zds?
= ?mod._digits;
????????????????????t2?
= ? 0 ;?i? = ?ny;
????????????????????
while ?(i -- )?
????????????????????{
????????????????????????t2?
= ?(t2 * 65536 )? + ?zds[i];
????????????????????????zds[i]?
= ?(t2? / ?dd)? & ? 0xffff ;
????????????????????????t2?
%= ?dd;
????????????????????}
????????????????}
????????????????mod._len?
= ?ny;
????????????????mod._sign?
= ?x._sign;
????????????????
if ?(x._sign? != ?y._sign)?
????????????????{
????????????????????
return ?add(mod,?y,? 1 );
????????????????}
????????????????
return ?normalize(mod);
????????????}

????????????div?
= ?z.clone();
????????????zds?
= ?div._digits;
????????????j?
= ?(nx? == ?ny? ? ?nx? + ? 2 ?:?nx? + ? 1 )? - ?ny;
????????????
for ?(i? = ? 0 ;?i? < ?j;?i ++ )?zds[i]? = ?zds[i? + ?ny];
????????????div._len?
= ?i;
????????????
return ?normalize(div);
????????}????????
????????
????????
private ? static ?function?normalize(x:BigInt):BigInt
????????{
????????????var?len:
* ? = ?x._len;
????????????var?ds:
* ? = ?x._digits;

????????????
while ?(len -- ? && ? ! ds[len]);
????????????x._len?
= ? ++ len;
????????????
return ?x;
????????}
????}????
}
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲老司机av| 国产欧美日韩精品一区| 国内自拍视频一区二区三区| 性欧美1819sex性高清| 99热这里只有精品8| 欧美日韩免费在线观看| 亚洲一区二区三区精品在线| 一本色道久久综合亚洲91| 国产精品成人av性教育| 欧美一级专区| 久久久久88色偷偷免费| 亚洲精品乱码久久久久久黑人 | 麻豆精品传媒视频| 尤物yw午夜国产精品视频| 牛牛国产精品| 欧美女主播在线| 亚洲免费中文字幕| 性欧美18~19sex高清播放| 国内视频一区| 亚洲国产一区二区三区青草影视| 老鸭窝91久久精品色噜噜导演| 亚洲乱码精品一二三四区日韩在线 | 久久精品免费播放| 亚洲精品久久久久久一区二区| 99视频精品全部免费在线| 国产精品呻吟| 欧美大片免费观看在线观看网站推荐| 欧美激情亚洲| 久久国产手机看片| 欧美国产日韩xxxxx| 亚洲自拍偷拍福利| 久久精品国产综合精品| 亚洲美女在线看| 亚洲欧美视频在线观看| 亚洲激情欧美激情| 亚洲一区二区在线免费观看| 在线看不卡av| 亚洲一级在线观看| 亚洲日韩中文字幕在线播放| 亚洲欧美日韩视频二区| 亚洲美女毛片| 久久九九热re6这里有精品| 国产精品99久久久久久久久久久久 | 麻豆精品在线视频| 国产精品jvid在线观看蜜臀| 欧美成人一区二区三区片免费| 国产精品青草综合久久久久99| 免费欧美日韩| 国产午夜精品一区二区三区视频 | 欧美日韩亚洲另类| 欧美高清你懂得| 狠狠88综合久久久久综合网| 亚洲免费成人av| 亚洲精品四区| 久久一区二区三区四区五区| 欧美中文在线观看国产| 欧美日韩调教| 亚洲欧洲日本mm| 亚洲国产日韩欧美在线99| 久久国产精品久久久久久电车| 亚洲免费视频在线观看| 欧美日韩国产综合视频在线观看 | 免费亚洲婷婷| 在线不卡a资源高清| 欧美一区二区私人影院日本 | 日韩视频一区二区三区在线播放| 欧美中文字幕| 久久久99精品免费观看不卡| 国产欧美精品日韩区二区麻豆天美| 亚洲国产精品123| 亚洲精品美女免费| 欧美激情区在线播放| 亚洲电影一级黄| 亚洲日本成人在线观看| 免费观看在线综合色| 男人的天堂亚洲| 亚洲国产精品va在线看黑人| 久久精品亚洲精品| 欧美.www| 亚洲精品在线视频| 欧美日韩精品在线观看| 夜夜嗨av一区二区三区免费区| 亚洲性视频网址| 国产精品一区在线观看你懂的| 亚洲一二三区精品| 久久婷婷麻豆| 亚洲黄色有码视频| 欧美日韩三级视频| 亚洲尤物在线| 欧美不卡视频一区| 夜夜嗨av一区二区三区四季av| 欧美日韩国产在线观看| 亚洲欧美福利一区二区| 久久夜色撩人精品| 亚洲精品美女免费| 国产精品国产三级国产普通话99| 亚洲一区二区三区激情| 久久综合一区| 亚洲免费观看在线观看| 国产精品国产三级国产aⅴ9色| 香蕉久久a毛片| 欧美高清不卡在线| 亚洲欧美在线一区二区| 一区免费观看视频| 欧美激情麻豆| 欧美一区二区三区在线看| 欧美aⅴ一区二区三区视频| 一区二区三区日韩精品| 国产视频在线观看一区二区三区 | 一区二区三区视频在线| 欧美在线视频一区二区| 亚洲日本电影| 国产午夜精品理论片a级大结局 | 欧美一区二区三区在线观看视频 | 亚洲特级片在线| 亚洲福利视频网站| 欧美亚洲综合另类| 99国产精品99久久久久久| 国产视频一区欧美| 欧美日韩国产二区| 久久伊人亚洲| 午夜久久久久久| 亚洲精品影院在线观看| 久久一区国产| 欧美亚洲免费电影| 在线亚洲一区二区| 亚洲国产精品v| 国内欧美视频一区二区| 国产精品theporn| 欧美人牲a欧美精品| 老司机一区二区| 久久久精品欧美丰满| 亚洲欧美日韩另类| 日韩亚洲欧美综合| 亚洲精品国产视频| 亚洲国产精品视频| 欧美激情91| 麻豆成人在线播放| 久久久久久亚洲精品不卡4k岛国| 亚洲欧美成人| 正在播放欧美一区| 一区二区不卡在线视频 午夜欧美不卡在 | 久久久青草婷婷精品综合日韩| 午夜视频一区二区| 午夜视黄欧洲亚洲| 香蕉国产精品偷在线观看不卡| 亚洲一区视频在线| 亚洲尤物在线视频观看| 在线亚洲欧美专区二区| 宅男在线国产精品| 一区二区三区 在线观看视| 亚洲看片一区| 宅男精品导航| 香蕉久久夜色精品国产| 久久成人在线| 久久久久国产精品麻豆ai换脸| 久久精品日产第一区二区三区| 欧美一级一区| 久久中文字幕一区二区三区| 久久深夜福利免费观看| 另类激情亚洲| 亚洲高清成人| 亚洲美女在线一区| 亚洲影院在线观看| 久久精品国语| 欧美激情第五页| 国产精品高潮呻吟| 国产午夜精品久久久久久久| 激情综合电影网| 亚洲日韩第九十九页| 在线视频你懂得一区二区三区| 亚洲欧美激情视频| 久久er精品视频| 久久久久久久999| 亚洲人成网站影音先锋播放| 一区二区不卡在线视频 午夜欧美不卡在| 99国产一区| 久久国产精品99久久久久久老狼| 久久一区中文字幕| 国产精品福利片| 激情久久影院| 一卡二卡3卡四卡高清精品视频| 欧美一区二区在线看| 欧美sm重口味系列视频在线观看| 亚洲日韩视频| 欧美中文在线观看| 欧美aⅴ99久久黑人专区| 国产精品久久久久久久9999 | 国产精品久久久久久久久久免费| 国产一区深夜福利| 亚洲伊人色欲综合网| 久久蜜桃av一区精品变态类天堂| 亚洲欧洲免费视频| 久久久国际精品| 国产精品入口夜色视频大尺度| 亚洲国产女人aaa毛片在线| 欧美一区二区三区啪啪| 亚洲免费成人av电影| 另类尿喷潮videofree| 国产欧美日韩一区二区三区|