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

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>
            久久精品女人| 欧美一区二区三区啪啪| 麻豆成人精品| 亚洲国产精品一区制服丝袜 | 女人色偷偷aa久久天堂| 久久精品久久综合| 樱花yy私人影院亚洲| 欧美大色视频| 欧美日韩国产系列| 亚洲欧美国产日韩中文字幕 | 噜噜噜在线观看免费视频日韩 | 在线综合亚洲| 狠狠v欧美v日韩v亚洲ⅴ| 欧美成人性网| 欧美吻胸吃奶大尺度电影| 性做久久久久久久免费看| 欧美一乱一性一交一视频| 亚洲二区在线| 一本色道88久久加勒比精品| 国产伦精品一区二区三区免费| 久久福利精品| 欧美激情第10页| 午夜精品久久久久影视| 久久一区二区精品| 亚洲永久免费| 猫咪成人在线观看| 午夜精品久久| 免费成人av| 欧美一区二区三区在线观看视频| 久久久欧美精品sm网站| 亚洲在线成人精品| 欧美岛国在线观看| 久久亚洲精品视频| 欧美三区美女| 亚洲第一精品影视| 国内精品美女在线观看| 一本大道av伊人久久综合| 亚洲国产高清在线| 香蕉久久一区二区不卡无毒影院| 亚洲激情综合| 久久久免费精品视频| 欧美一区二区三区喷汁尤物| 欧美精品亚洲| 亚洲国产裸拍裸体视频在线观看乱了中文 | 蜜桃久久精品一区二区| 国产精品久久久久aaaa樱花| 欧美成人xxx| 国内自拍一区| 午夜在线a亚洲v天堂网2018| 亚洲一区二区免费视频| 欧美精品日本| 亚洲国产精品国自产拍av秋霞| 激情欧美一区二区三区| 欧美一级精品大片| 性欧美videos另类喷潮| 国产精品福利影院| 一区二区日韩欧美| 在线视频精品一| 欧美日韩国产综合一区二区| 亚洲国产日韩欧美一区二区三区| 亚洲第一网站免费视频| 久久人人看视频| 免费视频久久| 亚洲欧洲日韩综合二区| 欧美成人午夜激情视频| 欧美激情日韩| 日韩视频永久免费观看| 欧美激情aaaa| 99精品视频免费在线观看| 一二三区精品| 国产精品高潮呻吟久久av无限| 一区二区三区免费看| 性8sex亚洲区入口| 国内精品久久久久久| 久久久国产精品亚洲一区| 久久综合精品国产一区二区三区| 韩日视频一区| 欧美freesex8一10精品| 亚洲毛片av| 香蕉av福利精品导航| 国产一区二区三区免费在线观看 | 亚洲午夜在线观看| 欧美中文日韩| 亚洲国产精品黑人久久久| 蜜桃av一区二区三区| 夜夜嗨av一区二区三区| 欧美亚洲三区| 亚洲第一天堂av| 欧美日韩中文字幕在线| 欧美一级淫片aaaaaaa视频| 久久综合影音| 中文久久乱码一区二区| 国产日韩视频| 欧美不卡高清| 午夜精品久久久久久久久 | 欧美影院成年免费版| 樱花yy私人影院亚洲| 欧美日韩亚洲一区二区三区在线 | 中文亚洲免费| 蜜桃av一区二区在线观看| 在线一区二区三区四区| 国产亚洲毛片| 欧美日韩国产一级| 欧美在线999| 一本色道久久综合精品竹菊 | 亚洲精品国产欧美| 国产午夜精品全部视频在线播放| 免播放器亚洲| 香蕉av福利精品导航| 亚洲精品少妇| 久久婷婷蜜乳一本欲蜜臀| 日韩一级黄色片| 伊人成人在线视频| 国产精品美女久久久| 男女激情视频一区| 久久精品99国产精品酒店日本| 亚洲精品国精品久久99热一| 久久伊人精品天天| 性娇小13――14欧美| 亚洲网站在线看| 亚洲精品美女在线观看| 伊人婷婷久久| 国产在线视频欧美| 国产欧美一区在线| 国产精品电影网站| 欧美日韩亚洲国产精品| 欧美1区视频| 另类天堂视频在线观看| 久久爱另类一区二区小说| 亚洲一区自拍| 亚洲一区二区精品| 亚洲一二三区在线| 99国产精品视频免费观看一公开| 亚洲二区视频在线| 欧美大片免费观看| 免播放器亚洲一区| 久久综合给合久久狠狠色| 久久精品国产精品亚洲精品| 午夜精品久久久久久久白皮肤| 中文精品视频一区二区在线观看| 99www免费人成精品| 亚洲免费成人av| 日韩视频免费观看| 一本一本a久久| 一区二区三区视频在线| 亚洲视频中文| 亚洲欧美韩国| 亚洲欧美日产图| 亚洲午夜免费福利视频| 亚洲欧美日韩专区| 久久国产主播精品| 久久午夜精品一区二区| 欧美成人综合在线| 亚洲美女黄色| 亚洲一区二区三区午夜| 性亚洲最疯狂xxxx高清| 久久久久九九九| 欧美成人精品福利| 欧美婷婷久久| 国产亚洲欧美色| 91久久久久久久久久久久久| 日韩视频欧美视频| 性欧美激情精品| 裸体女人亚洲精品一区| 亚洲欧洲日韩在线| 亚洲自拍另类| 久久性色av| 欧美视频在线观看 亚洲欧| 国产日产欧产精品推荐色 | 亚洲影音一区| 久久青青草原一区二区| 亚洲国产一区二区视频| 中文av字幕一区| 久久亚洲欧美| 国产精品福利在线| 激情伊人五月天久久综合| 一本色道久久88综合日韩精品| 香蕉成人啪国产精品视频综合网| 麻豆精品一区二区综合av| 一区二区国产精品| 久久久水蜜桃av免费网站| 欧美日韩视频免费播放| 狠狠久久亚洲欧美专区| 亚洲午夜伦理| 欧美成人日韩| 性欧美大战久久久久久久免费观看| 欧美~级网站不卡| 国产一区二区日韩精品| 中日韩视频在线观看| 久久综合999| 亚洲一区久久| 欧美日本高清| 亚洲经典在线| 久久色中文字幕| 亚洲一区二区三区涩| 欧美高清视频在线| 在线观看日韩精品| 久久精品一区二区| 中文在线资源观看网站视频免费不卡| 看片网站欧美日韩|