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

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>
            亚洲级视频在线观看免费1级| 久久精品男女| 亚洲——在线| 亚洲免费影视| 亚洲在线视频网站| 欧美一级专区免费大片| 久久久久在线观看| 亚洲风情亚aⅴ在线发布| 欧美成人午夜激情在线| 亚洲激情成人| 亚洲欧美日韩国产| 免费成人高清在线视频| 国产精品hd| 激情综合在线| 一区二区日韩伦理片| 久久久久国产免费免费| 亚洲国产精品一区二区www| 在线午夜精品自拍| 久久久一二三| 国产精品日本精品| 91久久极品少妇xxxxⅹ软件| 亚洲一区二区视频在线观看| 久久资源av| 久久全球大尺度高清视频| 久久久久久久久久久久久女国产乱| 99视频一区二区三区| 99国产精品99久久久久久| 午夜精品婷婷| 欧美精品久久一区| 好吊色欧美一区二区三区四区| 亚洲精品欧洲| 免费91麻豆精品国产自产在线观看| 亚洲精品国久久99热| 久久精品国产亚洲a| 国产精品男gay被猛男狂揉视频| 亚洲电影免费观看高清完整版在线观看 | 国模叶桐国产精品一区| 亚洲精品一区二区三区樱花| 欧美一区在线直播| 99成人精品| 欧美va亚洲va国产综合| 国际精品欧美精品| 欧美亚洲色图校园春色| 亚洲精品网站在线播放gif| 久久精品一区二区| 国产乱码精品一区二区三| 亚洲天堂网在线观看| 亚洲激情专区| 欧美激情在线狂野欧美精品| 一区在线免费| 你懂的国产精品| 久久精品国产清高在天天线| 国产午夜精品理论片a级探花| 亚洲一区在线播放| 99xxxx成人网| 欧美日韩直播| 亚洲视频自拍偷拍| 99在线精品观看| 欧美日韩综合视频| 亚洲综合丁香| 亚洲在线一区二区| 国产精品久久久久免费a∨大胸| 亚洲性图久久| 一区二区三区高清| 国产精品美女久久久久aⅴ国产馆| 亚洲系列中文字幕| 国产精品99久久久久久宅男| 国产精品vvv| 欧美一区二区三区在线免费观看| 亚洲欧美国产77777| 国产一区二区三区在线观看网站| 欧美在线在线| 久久香蕉国产线看观看网| 亚洲高清免费| 亚洲最新在线视频| 国产精品一区二区黑丝| 欧美视频精品在线观看| 日韩一级黄色av| 欧美黄色精品| 在线亚洲电影| 亚洲一区综合| 曰本成人黄色| 亚洲精选国产| 国内精品久久久久久久果冻传媒| 欧美fxxxxxx另类| 欧美日韩mp4| 性色一区二区| 免费久久精品视频| 亚洲午夜激情免费视频| 欧美一区午夜精品| 99精品视频免费观看视频| 亚洲天堂第二页| 伊人久久男人天堂| 一本色道久久精品| 合欧美一区二区三区| 亚洲人精品午夜| 国产小视频国产精品| 欧美激情一二区| 欧美日韩在线播放一区| 久久裸体艺术| 国产精品va在线| 亚洲电影中文字幕| 国产亚洲欧美另类中文| 日韩午夜免费| 影音先锋中文字幕一区| 亚洲精品一级| 一区在线影院| 午夜在线精品偷拍| 国产精品99久久久久久久久| 久久天堂精品| 久久野战av| 国产美女一区二区| 一区二区三区导航| 亚洲精品一区二| 久久久久久黄| 久久九九精品| 国产免费观看久久| 亚洲桃花岛网站| 亚洲校园激情| 欧美日本免费| 亚洲国内自拍| 亚洲精品一区二区三区av| 久久久久久久久岛国免费| 欧美在线1区| 国产精品一二三四| 亚洲一区日韩| 午夜视频精品| 国产精品福利在线| 一区二区三区高清| 亚洲一品av免费观看| 欧美日韩国产美女| 日韩视频在线你懂得| 亚洲精品系列| 欧美日本在线| 99这里只有精品| 亚洲私人影吧| 国产精品黄视频| 午夜精品在线视频| 久久精品中文| 在线激情影院一区| 欧美一区二区成人6969| 欧美一区二视频| 欧美一区二区三区电影在线观看| 国产精品美女www爽爽爽| 亚洲欧美日韩国产综合| 久久高清福利视频| 韩曰欧美视频免费观看| 久久久福利视频| 亚洲国产视频a| 亚洲自拍偷拍视频| 国产亚洲一区二区三区在线观看 | 久久国产乱子精品免费女| 国产精品日韩欧美大师| 欧美一级大片在线观看| 老牛影视一区二区三区| 亚洲国产日韩欧美在线动漫| 欧美了一区在线观看| 99这里只有精品| 久久久蜜桃精品| 亚洲久色影视| 国产视频一区二区在线观看| 久久这里有精品15一区二区三区| 亚洲精品视频在线播放| 欧美中文字幕视频| 亚洲区一区二区三区| 欧美三级在线播放| 久久另类ts人妖一区二区| 亚洲日本一区二区| 久久国产88| 一区二区三区高清不卡| 国产欧美精品久久| 欧美成人一区二区三区在线观看| 亚洲色图自拍| 欧美不卡三区| 亚洲欧美在线另类| 亚洲精品国产日韩| 国产在线欧美日韩| 欧美日韩亚洲系列| 久久婷婷麻豆| 亚洲欧美日韩人成在线播放| 欧美激情精品久久久久久黑人| 亚洲免费在线电影| 亚洲欧洲在线免费| 国产一区清纯| 国产精品久久久久久久久久ktv| 久久综合久久综合久久| 亚洲欧美清纯在线制服| 亚洲黄色影院| 免费欧美视频| 久久久久久久综合色一本| 亚洲视频一二三| 日韩亚洲成人av在线| 伊人狠狠色j香婷婷综合| 国产日韩欧美二区| 国产精品麻豆va在线播放| 欧美日韩色综合| 欧美日韩三级在线| 欧美日本在线| 欧美日本在线视频| 欧美激情aⅴ一区二区三区|