亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? biginteger.java

?? 整體思路 用createkey.java 文件來產(chǎn)生秘鑰
?? JAVA
?? 第 1 頁 / 共 5 頁
字號:
	    throw new ArithmeticException("BigInteger: modulus not positive");	// Trivial cases	if (exponent.signum == 0)            return (m.equals(ONE) ? ZERO : ONE);        if (this.equals(ONE))            return (m.equals(ONE) ? ZERO : ONE);        if (this.equals(ZERO) && exponent.signum >= 0)            return ZERO;        if (this.equals(negConst[1]) && (!exponent.testBit(0)))            return (m.equals(ONE) ? ZERO : ONE);            	boolean invertResult;	if ((invertResult = (exponent.signum < 0)))	    exponent = exponent.negate();	BigInteger base = (this.signum < 0 || this.compareTo(m) >= 0			   ? this.mod(m) : this);	BigInteger result;	if (m.testBit(0)) { // odd modulus	    result = base.oddModPow(exponent, m);	} else {	    /*	     * Even modulus.  Tear it into an "odd part" (m1) and power of two             * (m2), exponentiate mod m1, manually exponentiate mod m2, and             * use Chinese Remainder Theorem to combine results.	     */	    // Tear m apart into odd part (m1) and power of 2 (m2)	    int p = m.getLowestSetBit();   // Max pow of 2 that divides m	    BigInteger m1 = m.shiftRight(p);  // m/2**p	    BigInteger m2 = ONE.shiftLeft(p); // 2**p            // Calculate new base from m1            BigInteger base2 = (this.signum < 0 || this.compareTo(m1) >= 0                                ? this.mod(m1) : this);            // Caculate (base ** exponent) mod m1.            BigInteger a1 = (m1.equals(ONE) ? ZERO :                             base2.oddModPow(exponent, m1));	    // Calculate (this ** exponent) mod m2	    BigInteger a2 = base.modPow2(exponent, p);	    // Combine results using Chinese Remainder Theorem	    BigInteger y1 = m2.modInverse(m1);	    BigInteger y2 = m1.modInverse(m2);	    result = a1.multiply(m2).multiply(y1).add		     (a2.multiply(m1).multiply(y2)).mod(m);	}	return (invertResult ? result.modInverse(m) : result);    }    static int[] bnExpModThreshTable = {7, 25, 81, 241, 673, 1793,                                                Integer.MAX_VALUE}; // Sentinel    /**     * Returns a BigInteger whose value is x to the power of y mod z.     * Assumes: z is odd && x < z.     */    private BigInteger oddModPow(BigInteger y, BigInteger z) {    /*     * The algorithm is adapted from Colin Plumb's C library.     *     * The window algorithm:     * The idea is to keep a running product of b1 = n^(high-order bits of exp)     * and then keep appending exponent bits to it.  The following patterns     * apply to a 3-bit window (k = 3):     * To append   0: square     * To append   1: square, multiply by n^1     * To append  10: square, multiply by n^1, square     * To append  11: square, square, multiply by n^3     * To append 100: square, multiply by n^1, square, square     * To append 101: square, square, square, multiply by n^5     * To append 110: square, square, multiply by n^3, square     * To append 111: square, square, square, multiply by n^7     *     * Since each pattern involves only one multiply, the longer the pattern     * the better, except that a 0 (no multiplies) can be appended directly.     * We precompute a table of odd powers of n, up to 2^k, and can then     * multiply k bits of exponent at a time.  Actually, assuming random     * exponents, there is on average one zero bit between needs to     * multiply (1/2 of the time there's none, 1/4 of the time there's 1,     * 1/8 of the time, there's 2, 1/32 of the time, there's 3, etc.), so     * you have to do one multiply per k+1 bits of exponent.     *     * The loop walks down the exponent, squaring the result buffer as     * it goes.  There is a wbits+1 bit lookahead buffer, buf, that is     * filled with the upcoming exponent bits.  (What is read after the     * end of the exponent is unimportant, but it is filled with zero here.)     * When the most-significant bit of this buffer becomes set, i.e.     * (buf & tblmask) != 0, we have to decide what pattern to multiply     * by, and when to do it.  We decide, remember to do it in future     * after a suitable number of squarings have passed (e.g. a pattern     * of "100" in the buffer requires that we multiply by n^1 immediately;     * a pattern of "110" calls for multiplying by n^3 after one more     * squaring), clear the buffer, and continue.     *     * When we start, there is one more optimization: the result buffer     * is implcitly one, so squaring it or multiplying by it can be     * optimized away.  Further, if we start with a pattern like "100"     * in the lookahead window, rather than placing n into the buffer     * and then starting to square it, we have already computed n^2     * to compute the odd-powers table, so we can place that into     * the buffer and save a squaring.     *     * This means that if you have a k-bit window, to compute n^z,     * where z is the high k bits of the exponent, 1/2 of the time     * it requires no squarings.  1/4 of the time, it requires 1     * squaring, ... 1/2^(k-1) of the time, it reqires k-2 squarings.     * And the remaining 1/2^(k-1) of the time, the top k bits are a     * 1 followed by k-1 0 bits, so it again only requires k-2     * squarings, not k-1.  The average of these is 1.  Add that     * to the one squaring we have to do to compute the table,     * and you'll see that a k-bit window saves k-2 squarings     * as well as reducing the multiplies.  (It actually doesn't     * hurt in the case k = 1, either.)     */        // Special case for exponent of one        if (y.equals(ONE))            return this;        // Special case for base of zero        if (signum==0)            return ZERO;        int[] base = (int[])mag.clone();        int[] exp = y.mag;        int[] mod = z.mag;        int modLen = mod.length;        // Select an appropriate window size        int wbits = 0;        int ebits = bitLength(exp, exp.length);	// if exponent is 65537 (0x10001), use minimum window size	if ((ebits != 17) || (exp[0] != 65537)) {	    while (ebits > bnExpModThreshTable[wbits]) {		wbits++;	    }	}        // Calculate appropriate table size        int tblmask = 1 << wbits;                // Allocate table for precomputed odd powers of base in Montgomery form        int[][] table = new int[tblmask][];        for (int i=0; i<tblmask; i++)            table[i] = new int[modLen];        // Compute the modular inverse        int inv = -MutableBigInteger.inverseMod32(mod[modLen-1]);        // Convert base to Montgomery form        int[] a = leftShift(base, base.length, modLen << 5);        MutableBigInteger q = new MutableBigInteger(),                          r = new MutableBigInteger(),                          a2 = new MutableBigInteger(a),                          b2 = new MutableBigInteger(mod);        a2.divide(b2, q, r);        table[0] = r.toIntArray();        // Pad table[0] with leading zeros so its length is at least modLen        if (table[0].length < modLen) {           int offset = modLen - table[0].length;           int[] t2 = new int[modLen];           for (int i=0; i<table[0].length; i++)               t2[i+offset] = table[0][i];           table[0] = t2;        }        // Set b to the square of the base        int[] b = squareToLen(table[0], modLen, null);        b = montReduce(b, mod, modLen, inv);        // Set t to high half of b        int[] t = new int[modLen];        for(int i=0; i<modLen; i++)            t[i] = b[i];        // Fill in the table with odd powers of the base                for (int i=1; i<tblmask; i++) {            int[] prod = multiplyToLen(t, modLen, table[i-1], modLen, null);            table[i] = montReduce(prod, mod, modLen, inv);        }        // Pre load the window that slides over the exponent        int bitpos = 1 << ((ebits-1) & (32-1));                int buf = 0;        int elen = exp.length;        int eIndex = 0;	for (int i = 0; i <= wbits; i++) {            buf = (buf << 1) | (((exp[eIndex] & bitpos) != 0)?1:0);            bitpos >>>= 1;            if (bitpos == 0) {                eIndex++;                bitpos = 1 << (32-1);                elen--;            }	}        int multpos = ebits;        // The first iteration, which is hoisted out of the main loop        ebits--;        boolean isone = true;	multpos = ebits - wbits;	while ((buf & 1) == 0) {            buf >>>= 1;            multpos++;	}	int[] mult = table[buf >>> 1];	buf = 0;        if (multpos == ebits)	    isone = false;        // The main loop        while(true) {            ebits--;            // Advance the window            buf <<= 1;            if (elen != 0) {                buf |= ((exp[eIndex] & bitpos) != 0) ? 1 : 0;                bitpos >>>= 1;                if (bitpos == 0) {                    eIndex++;                    bitpos = 1 << (32-1);                    elen--;                }            }            // Examine the window for pending multiplies            if ((buf & tblmask) != 0) {                multpos = ebits - wbits;                while ((buf & 1) == 0) {                    buf >>>= 1;                    multpos++;                }                mult = table[buf >>> 1];                buf = 0;            }            // Perform multiply            if (ebits == multpos) {                if (isone) {                    b = (int[])mult.clone();                    isone = false;                } else {                    t = b;                    a = multiplyToLen(t, modLen, mult, modLen, a);                    a = montReduce(a, mod, modLen, inv);                    t = a; a = b; b = t;                }            }            // Check if done            if (ebits == 0)                break;            // Square the input            if (!isone) {                t = b;                a = squareToLen(t, modLen, a);                a = montReduce(a, mod, modLen, inv);                t = a; a = b; b = t;            }	}        // Convert result out of Montgomery form and return        int[] t2 = new int[2*modLen];        for(int i=0; i<modLen; i++)            t2[i+modLen] = b[i];        b = montReduce(t2, mod, modLen, inv);        t2 = new int[modLen];        for(int i=0; i<modLen; i++)            t2[i] = b[i];                   return new BigInteger(1, t2);    }    /**     * Montgomery reduce n, modulo mod.  This reduces modulo mod and divides     * by 2^(32*mlen). Adapted from Colin Plumb's C library.     */    private static int[] montReduce(int[] n, int[] mod, int mlen, int inv) {        int c=0;        int len = mlen;        int offset=0;        do {            int nEnd = n[n.length-1-offset];            int carry = mulAdd(n, mod, offset, mlen, inv * nEnd);            c += addOne(n, offset, mlen, carry);            offset++;        } while(--len > 0);                while(c>0)            c += subN(n, mod, mlen);        while (intArrayCmpToLen(n, mod, mlen) >= 0)            subN(n, mod, mlen);        return n;    }    /*     * Returns -1, 0 or +1 as big-endian unsigned int array arg1 is less than,     * equal to, or greater than arg2 up to length len.     */    private static int intArrayCmpToLen(int[] arg1, int[] arg2, int len) {	for (int i=0; i<len; i++) {	    long b1 = arg1[i] & LONG_MASK;	    long b2 = arg2[i] & LONG_MASK;	    if (b1 < b2)		return -1;	    if (b1 > b2)		return 1;	}	return 0;    }    /**     * Subtracts two numbers of same length, returning borrow.     */    private static int subN(int[] a, int[] b, int len) {        long sum = 0;        while(--len >= 0) {            sum = (a[len] & LONG_MASK) -                  (b[len] & LONG_MASK) + (sum >> 32);            a[len] = (int)sum;        }        return (int)(sum >> 32);    }    /**     * Multiply an array by one word k and add to result, return the carry     */    static int mulAdd(int[] out, int[] in, int offset, int len, int k) {        long kLong = k & LONG_MASK;        long carry = 0;        offset = out.length-offset - 1;        for (int j=len-1; j >= 0; j--) {            long product = (in[j] & LONG_MASK) * kLong +                           (out[offset] & LONG_MASK) + carry;            out[offset--] = (int)product;            carry = product >>> 32;        }        return (int)carry;    }    /**     * Add one word to the number a mlen words into a. Return the resulting     * carry.     */    static int addOne(int[] a, int offset, int mlen, int carry) {        offset = a.length-1-mlen-offset;        long t = (a[offset] & LONG_MASK) + (carry & LONG_MASK);              

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
自拍偷在线精品自拍偷无码专区| 国产高清精品网站| 精品一区二区三区av| 色婷婷久久久亚洲一区二区三区| 久久综合狠狠综合久久综合88 | 久久影院电视剧免费观看| 亚洲欧美国产毛片在线| 国产美女娇喘av呻吟久久| 5858s免费视频成人| 一区二区三区国产豹纹内裤在线| 懂色av一区二区夜夜嗨| 欧美一级久久久| 亚洲伊人色欲综合网| 91麻豆精品在线观看| 国产午夜精品久久久久久久| 六月婷婷色综合| 666欧美在线视频| 亚洲国产aⅴ成人精品无吗| 99视频精品免费视频| 欧美国产日韩亚洲一区| 高清不卡一二三区| 国产欧美精品一区二区色综合朱莉 | 日韩欧美成人午夜| 亚洲成a天堂v人片| 99精品视频在线观看| 国产精品久久久久久久久久久免费看| 九九精品视频在线看| 精品国产乱码久久| 韩国一区二区三区| 久久综合色婷婷| 国产成人在线电影| 国产精品三级电影| 99精品国产热久久91蜜凸| 亚洲人成7777| 欧美色图第一页| 日韩综合在线视频| 欧美大度的电影原声| 国产原创一区二区| 国产欧美日韩精品一区| 97超碰欧美中文字幕| 亚洲一区二区三区自拍| 欧洲精品一区二区三区在线观看| 一区二区三区资源| 欧美日韩高清在线播放| 免费观看久久久4p| 欧美精品一区二区蜜臀亚洲| 国产露脸91国语对白| 成人欧美一区二区三区视频网页| 日本福利一区二区| 琪琪久久久久日韩精品| 久久久蜜桃精品| 色综合欧美在线| 爽好久久久欧美精品| 日韩免费电影一区| 99久久99久久精品国产片果冻 | 欧美在线一区二区| 日本va欧美va欧美va精品| 久久美女高清视频| 99精品一区二区三区| 天天色 色综合| 综合电影一区二区三区| 在线欧美一区二区| 韩国欧美一区二区| 亚洲精品视频免费观看| 日韩一区二区三区四区五区六区| 国产传媒欧美日韩成人| 亚洲午夜精品一区二区三区他趣| 日韩欧美久久久| 日本韩国欧美在线| 国产精品18久久久久| 亚洲高清三级视频| 国产精品每日更新在线播放网址| 欧美午夜电影网| 不卡视频一二三| 久久99久国产精品黄毛片色诱| 亚洲欧美一区二区三区极速播放| 日韩免费看的电影| 欧美日本精品一区二区三区| 成人综合婷婷国产精品久久免费| 午夜欧美电影在线观看| 一区在线中文字幕| 精品久久人人做人人爰| 欧洲精品一区二区| 懂色av中文字幕一区二区三区 | 久久久综合精品| 91传媒视频在线播放| 成人午夜碰碰视频| 奇米影视一区二区三区| 亚洲精品自拍动漫在线| 国产亚洲精品资源在线26u| 91精品国产日韩91久久久久久| 99久久久久免费精品国产 | 欧美日韩亚洲综合在线| 99久久婷婷国产综合精品电影| 国产一区二区三区视频在线播放| 五月天婷婷综合| 一区二区三区视频在线看| 一区二区中文视频| 国产精品午夜春色av| 国产女主播在线一区二区| 精品日韩欧美在线| 欧美电影精品一区二区| 欧美成人猛片aaaaaaa| 日韩一区二区中文字幕| 91精品国产综合久久精品图片 | 欧美日韩一区二区在线观看视频| 91在线看国产| 成人国产视频在线观看| 成人午夜视频网站| 9久草视频在线视频精品| 成人国产精品视频| 91影院在线观看| 色综合激情五月| 一本久道久久综合中文字幕| 91在线视频观看| 在线不卡一区二区| 91精品国产一区二区三区| 91精品国产aⅴ一区二区| 日韩精品一区二区三区中文精品| 日韩一区二区在线看片| 精品女同一区二区| 日本一区二区动态图| 亚洲欧洲一区二区在线播放| 亚洲裸体xxx| 午夜精品一区在线观看| 免费在线观看不卡| 国产成人av资源| 色综合天天综合在线视频| 欧美视频一区二| 日韩一区二区三区免费看| 国产丝袜美腿一区二区三区| 中文字幕+乱码+中文字幕一区| 国产精品剧情在线亚洲| 一区二区激情小说| 蜜桃久久精品一区二区| 国产东北露脸精品视频| 色天天综合色天天久久| 欧美日本国产视频| 国产欧美一区二区精品久导航 | 成人午夜激情视频| 在线一区二区视频| 精品日韩在线观看| 亚洲人精品午夜| 午夜激情久久久| 国产a视频精品免费观看| 一本一道波多野结衣一区二区 | 在线精品国精品国产尤物884a| 欧美电影在哪看比较好| 久久精子c满五个校花| 亚洲尤物在线视频观看| 国产一区 二区| 欧美日本一区二区三区| 亚洲国产电影在线观看| 日韩高清欧美激情| 白白色 亚洲乱淫| 日韩一区二区免费在线观看| 亚洲视频一区在线| 麻豆国产精品官网| 色88888久久久久久影院按摩| 精品国产三级a在线观看| 国产在线不卡一区| 色妞www精品视频| 久久久久久9999| 日韩av在线发布| 97精品视频在线观看自产线路二| 日韩欧美区一区二| 亚洲一二三四在线| 99久久精品国产导航| 久久影院午夜片一区| 日韩av午夜在线观看| 91官网在线免费观看| 亚洲国产精品ⅴa在线观看| 精品亚洲欧美一区| 91精品国产综合久久福利| 亚洲午夜在线视频| 色悠悠久久综合| 国产视频视频一区| 国产自产高清不卡| 精品久久久久久久一区二区蜜臀| 亚洲成人av一区二区| 国产欧美久久久精品影院| 99国产精品99久久久久久| 日韩欧美成人午夜| 亚洲欧美日本在线| 午夜伊人狠狠久久| 精品免费一区二区三区| 欧美日韩一级片网站| 91在线你懂得| 欧美日韩国产一区| 色先锋aa成人| 波多野结衣欧美| 亚洲精品高清在线| 欧美浪妇xxxx高跟鞋交| 精品在线观看免费| 自拍偷拍亚洲欧美日韩| 欧美日本在线播放| 成人在线综合网站| 亚洲妇女屁股眼交7| 久久色在线观看| 欧美午夜精品一区二区蜜桃|