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

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運轉(zhuǎn),開心的工作
簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
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>
            久久激情一区| 久久偷看各类wc女厕嘘嘘偷窃| 99国产精品久久久久久久久久| 亚洲电影视频在线| 亚洲国产精彩中文乱码av在线播放| 国产欧美精品| 欧美成人亚洲成人| 欧美亚洲综合在线| 久久中文久久字幕| 欧美ab在线视频| 国产精品久久久久久久久久妞妞| 国产精品女人毛片| 黄色成人在线免费| 亚洲国产一区二区视频| 91久久国产综合久久| 一本色道久久88亚洲综合88| 午夜精品福利一区二区蜜股av| 久久久精品动漫| 最新精品在线| 亚洲欧美乱综合| 麻豆成人精品| 国产精品久久久久久户外露出 | 加勒比av一区二区| 欧美三级第一页| 免费在线看成人av| 国产精品久久777777毛茸茸| 欧美精品一区二区三区高清aⅴ| 香蕉国产精品偷在线观看不卡| 亚洲欧美激情视频| 久久精品99国产精品日本| 久久亚洲欧美| 国产精品久久久久久久浪潮网站| 国产一区二区三区久久悠悠色av | 欧美成人一区二区三区| 亚洲一区二区欧美| 久久gogo国模啪啪人体图| 中文国产成人精品| 亚洲激情影视| 国产一区二区三区免费在线观看 | 99re亚洲国产精品| 一区二区三区精密机械公司| 亚洲视频在线一区| 亚洲欧美成人网| 欧美在线啊v| 亚洲美女淫视频| 欧美第一黄色网| 国产综合色产在线精品| 亚洲一区二区三| 亚洲精美视频| 久久久噜噜噜久久中文字免| 国产伦一区二区三区色一情| 亚洲一区二区三区免费视频| 亚洲精品视频一区二区三区| 久久久免费av| 亚洲一区二区免费看| 美女脱光内衣内裤视频久久影院 | 亚洲国产欧美日韩精品| 午夜精品福利电影| 亚洲美女福利视频网站| 蜜臀99久久精品久久久久久软件| 国产日韩在线一区二区三区| 夜夜嗨av色一区二区不卡| 亚洲高清影视| 免费亚洲电影在线| 亚洲激情偷拍| 亚洲激情一区二区三区| 久久―日本道色综合久久| 国产在线精品自拍| 欧美国产精品| 欧美激情精品久久久久久免费印度 | 久久精品男女| 日韩一级在线| 欧美mv日韩mv国产网站app| 亚洲欧美另类在线观看| 国产精品视频免费观看| 久久精品人人做人人爽电影蜜月| 午夜精品免费视频| 国产女主播一区| 免费看成人av| 欧美小视频在线| 羞羞答答国产精品www一本| 亚洲欧美日韩精品久久奇米色影视| 玖玖精品视频| 模特精品在线| 亚洲日韩中文字幕在线播放| 免费人成网站在线观看欧美高清| 亚洲日本欧美在线| 艳女tv在线观看国产一区| 国产精品午夜视频| 欧美+亚洲+精品+三区| 欧美日韩久久久久久| 午夜在线视频一区二区区别| 午夜精品视频在线观看一区二区| 亚洲国产精品www| 中文成人激情娱乐网| 狠久久av成人天堂| 亚洲深夜影院| 亚洲精品日韩综合观看成人91| 一区二区三区日韩欧美| 在线观看视频亚洲| 日韩网站在线| 欧美一区日本一区韩国一区| 最近看过的日韩成人| 亚洲一区二区免费在线| 狠狠久久亚洲欧美| 宅男噜噜噜66一区二区66| 亚洲高清不卡| 性欧美长视频| 亚洲在线成人| 欧美肥婆在线| 久久久青草青青国产亚洲免观| 欧美福利一区二区| 久久久精品国产99久久精品芒果| 欧美色123| 91久久久久久久久久久久久| 一区精品在线播放| 亚洲欧美在线aaa| 亚洲一区二区三区在线播放| 欧美二区不卡| 欧美国产日本| 在线观看中文字幕亚洲| 亚洲欧美日韩一区| 亚洲综合视频在线| 欧美日韩中字| 99国产精品久久久久久久久久| 影音先锋中文字幕一区| 亚洲欧美日韩精品久久| 午夜性色一区二区三区免费视频| 国产精品久久久久久久久搜平片| 99亚洲一区二区| 中文亚洲欧美| 欧美日韩中文字幕在线| 一区二区欧美在线观看| 久久久噜久噜久久综合| 久久裸体视频| 精品动漫3d一区二区三区免费版| 久久久久成人精品| 美女日韩欧美| 亚洲激情网址| 欧美剧在线观看| 日韩一区二区福利| 午夜精品国产| 国产亚洲成av人片在线观看桃| 亚洲激情自拍| 欧美日韩在线不卡一区| 欧美黑人国产人伦爽爽爽| 亚洲高清免费| 欧美高清免费| 一本色道久久综合亚洲精品不卡 | 亚洲国产欧美日韩| 亚洲欧洲在线一区| 欧美日韩国产精品一区二区亚洲| 日韩图片一区| 欧美在线播放一区二区| 黑丝一区二区| 欧美日韩国产在线看| 亚洲一区二区免费| 老司机67194精品线观看| 亚洲日本中文| 国产精品色婷婷久久58| 久久久久国产精品厨房| 亚洲欧洲在线免费| 欧美一区三区三区高中清蜜桃| 国模大胆一区二区三区| 欧美成人精品影院| 亚洲午夜日本在线观看| 蜜臀久久久99精品久久久久久| 日韩午夜黄色| 狠狠v欧美v日韩v亚洲ⅴ| 欧美日韩精品一区视频| 欧美在线短视频| 99精品国产99久久久久久福利| 久久国产88| 亚洲视频在线观看| 精品999在线观看| 欧美日韩亚洲天堂| 久久大逼视频| 在线天堂一区av电影| 欧美91福利在线观看| 亚洲欧美激情一区二区| 91久久精品国产| 国产欧美日韩三级| 欧美片第一页| 玖玖视频精品| 亚洲欧美日韩一区二区在线 | 欧美性大战久久久久久久蜜臀| 久久夜色精品国产| 亚洲专区免费| 日韩视频在线免费观看| 欧美电影免费观看网站| 欧美一区二区视频97| 亚洲视频在线一区| 99成人在线| 亚洲精品久久久久久下一站| 国内精品亚洲| 国产一区日韩二区欧美三区| 国产精品热久久久久夜色精品三区 | 亚洲欧美精品suv| 一本色道久久加勒比88综合| 亚洲高清在线观看|