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

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

?? prime.c

?? 包含哈希,對(duì)稱以及非對(duì)稱的經(jīng)典算法 包含經(jīng)典事例
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
 * (x^e)^d == x (mod p), then d*e == 1 (mod p-1), so gcd(e,p-1) must be 1. * The prime returned is constrained to not be congruent to 1 modulo * any of the zero-terminated list of 16-bit numbers.  Note that this list * should contain all the small prime factors of e.  (You'll have to test * for large prime factors of e elsewhere, but the chances of needing to * generate another prime are low.) * * The list is terminated by a 0, and may be empty. * */intprimeGen(struct BigNum *bn, unsigned (*rand)(unsigned),         int (*f)(void *arg, int c), void *arg, unsigned exponent, ...){	int retval;	int modexps = 0;	unsigned short offsets[SHUFFLE];	unsigned i, j;	unsigned p, q, prev;	struct BigNum a, e;#ifdef MSDOS	unsigned char *sieve;#else	unsigned char sieve[SIEVE];#endif#ifdef MSDOS	sieve = lbnMemAlloc(SIEVE);	if (!sieve)		return -1;#endif	bnBegin(&a);	bnBegin(&e);#if 0	/* Self-test (not used for production) */{	struct BigNum t;	static unsigned char const prime1[] = {5};	static unsigned char const prime2[] = {7};	static unsigned char const prime3[] = {11};	static unsigned char const prime4[] = {1, 1}; /* 257 */	static unsigned char const prime5[] = {0xFF, 0xF1}; /* 65521 */	static unsigned char const prime6[] = {1, 0, 1}; /* 65537 */	static unsigned char const prime7[] = {1, 0, 3}; /* 65539 */	/* A small prime: 1234567891 */	static unsigned char const prime8[] = {0x49, 0x96, 0x02, 0xD3};	/* A slightly larger prime: 12345678901234567891 */	static unsigned char const prime9[] = {		0xAB, 0x54, 0xA9, 0x8C, 0xEB, 0x1F, 0x0A, 0xD3 };	/*	 * No, 123456789012345678901234567891 isn't prime; it's just a	 * lucky, easy-to-remember conicidence.  (You have to go to	 * ...4567907 for a prime.)	 */	static struct {		unsigned char const *prime;		unsigned size;	} const primelist[] = {		{ prime1, sizeof(prime1) },		{ prime2, sizeof(prime2) },		{ prime3, sizeof(prime3) },		{ prime4, sizeof(prime4) },		{ prime5, sizeof(prime5) },		{ prime6, sizeof(prime6) },		{ prime7, sizeof(prime7) },		{ prime8, sizeof(prime8) },		{ prime9, sizeof(prime9) } };	bnBegin(&t);	for (i = 0; i < sizeof(primelist)/sizeof(primelist[0]); i++) {			bnInsertBytes(&t, primelist[i].prime, 0,				      primelist[i].size);			bnCopy(&e, &t);			(void)bnSubQ(&e, 1);			bnTwoExpMod(&a, &e, &t);			p = bnBits(&a);			if (p != 1) {				printf(			"Bug: Fermat(2) %u-bit output (1 expected)\n", p);				fputs("Prime = 0x", stdout);				for (j = 0; j < primelist[i].size; j++)					printf("%02X", primelist[i].prime[j]);				putchar('\n');			}			bnSetQ(&a, 3);			bnExpMod(&a, &a, &e, &t);			if (p != 1) {				printf(			"Bug: Fermat(3) %u-bit output (1 expected)\n", p);				fputs("Prime = 0x", stdout);				for (j = 0; j < primelist[i].size; j++)					printf("%02X", primelist[i].prime[j]);				putchar('\n');			}		}	bnEnd(&t);}#endif	/* First, make sure that bn is odd. */	if ((bnLSWord(bn) & 1) == 0)		(void)bnAddQ(bn, 1);retry:	/* Then build a sieve starting at bn. */	sieveBuild(sieve, SIEVE, bn, 2, 0);	/* Do the extra exponent sieving */	if (exponent) {		va_list ap;		unsigned t = exponent;		va_start(ap, exponent);		do {			/* The exponent had better be odd! */			assert(t & 1);			i = bnModQ(bn, t);			/* Find 1-i */			if (i == 0)				i = 1;			else if (--i)				i = t - i;			/* Divide by 2, modulo the exponent */			i = (i & 1) ? i/2 + t/2 + 1 : i/2;			/* Remove all following multiples from the sieve. */			sieveSingle(sieve, SIEVE, i, t);			/* Get the next exponent value */			t = va_arg(ap, unsigned);		} while (t);		va_end(ap);	}	/* Fill up the offsets array with the first SHUFFLE candidates */	i = p = 0;	/* Get first prime */	if (sieve[0] & 1 || (p = sieveSearch(sieve, SIEVE, p)) != 0)		offsets[i++] = p;	/*	 * If we have a prime and we have a shuffle function so it makes	 * to fill up the table, so do.	 */	if (rand && i) {		do {			p = sieveSearch(sieve, SIEVE, p);			if (p == 0)				break;			offsets[i++] = p;		} while (i < SHUFFLE);	}	/* Choose a random candidate for experimentation */	prev = 0;	while (i) {		/* Pick a random entry from the shuffle table */		j = rand ? rand(i) : 0;		q = offsets[j];		/* Replace the entry with some more data, if possible */		if (p && (p = sieveSearch(sieve, SIEVE, p)) != 0)			offsets[j] = p;		else			offsets[j] = offsets[--i];		/* Adjust bn to have the right value */		if (q > prev) {			if (bnAddQ(bn, q-prev) < 0)				goto failed;			if (bnAddQ(bn, q-prev) < 0)				goto failed;		} else {			if (bnSubQ(bn, prev-q))				goto failed;			if (bnSubQ(bn, prev-q))				goto failed;		}		prev = q;		/* Now do the Fermat tests */		retval = primeTest(bn, &e, &a, f, arg);		if (retval <= 0)			goto done;	/* Success or error */		modexps += retval;		if (f && (retval = f(arg, '.')) < 0)			goto done;	}	/* Ran out of sieve space - increase bn and keep trying. */	if (bnSubQ(bn, (SIEVE*8)-prev))		goto failed;	if (bnSubQ(bn, (SIEVE*8)-prev))		goto failed;	if (f && (retval = f(arg, '/')) < 0)		goto done;	goto retry;failed:	retval = -1;done:	bnEnd(&e);	bnEnd(&a);	lbnMemWipe(offsets, sizeof(offsets));#ifdef MSDOS	lbnMemFree(sieve, SIEVE);#else	lbnMemWipe(sieve, sizeof(sieve));#endif	return retval < 0 ? retval : modexps;}/* * Similar, but searches forward from the given starting value in steps of * "step" rather than 1.  The step size must be even, and bn must be odd. * Among other possibilities, this can be used to generate "strong" * primes, where p-1 has a large prime factor. */intprimeGenStrong(struct BigNum *bn, struct BigNum const *step,	int (*f)(void *arg, int c), void *arg){	int retval;	unsigned p, prev;	struct BigNum a, e;	int modexps = 0;#ifdef MSDOS	unsigned char *sieve;#else	unsigned char sieve[SIEVE];#endif#ifdef MSDOS	sieve = lbnMemAlloc(SIEVE);	if (!sieve)		return -1;#endif	/* Step must be even and bn must be odd */	assert((bnLSWord(step) & 1) == 0);	assert((bnLSWord(bn) & 1) == 1);	bnBegin(&a);	bnBegin(&e);	for (;;) {		if (sieveBuildBig(sieve, SIEVE, bn, step, 0) < 0)			goto failed;		p = prev = 0;		if (sieve[0] & 1 || (p = sieveSearch(sieve, SIEVE, p)) != 0) {			do {				/*				 * Adjust bn to have the right value,				 * adding (p-prev) * 2*step.				 */				assert(p >= prev);				/* Compute delta into a */				if (bnMulQ(&a, step, p-prev) < 0)					goto failed;				if (bnAdd(bn, &a) < 0)					goto failed;				prev = p;				retval = primeTest(bn, &e, &a, f, arg);				if (retval <= 0)					goto done;	/* Success! */				modexps += retval;				if (f && (retval = f(arg, '.')) < 0)					goto done;				/* And try again */				p = sieveSearch(sieve, SIEVE, p);			} while (p);		}		/* Ran out of sieve space - increase bn and keep trying. */#if SIEVE*8 == 65536		/* Corner case that will never actually happen */		if (!prev) {			if (bnAdd(bn, step) < 0)				goto failed;			p = 65535;		} else {			p = (unsigned)(SIEVE*8 - prev);		}#else		p = SIEVE*8 - prev;#endif		if (bnMulQ(&a, step, p) < 0 || bnAdd(bn, &a) < 0)			goto failed;		if (f && (retval = f(arg, '/')) < 0)			goto done;	} /* for (;;) */failed:	retval = -1;done:	bnEnd(&e);	bnEnd(&a);#ifdef MSDOS	lbnMemFree(sieve, SIEVE);#else	lbnMemWipe(sieve, sizeof(sieve));#endif	return retval < 0 ? retval : modexps;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
不卡的av电影在线观看| 成人国产在线观看| 国产精品三级av| 欧洲国产伦久久久久久久| 日韩在线一二三区| 国产精品伦一区| 欧美三级电影在线观看| 韩国精品主播一区二区在线观看| 中文字幕精品一区| 欧美精品tushy高清| 成人美女视频在线看| 丝袜诱惑亚洲看片| 亚洲视频在线观看一区| 欧美一个色资源| 色综合久久久久久久久| 国产精品一二三区在线| 偷拍一区二区三区| 亚洲日穴在线视频| 国产日产精品1区| 欧美精品18+| 91国产免费看| av一区二区久久| 韩国欧美一区二区| 免费观看日韩电影| 一区二区三区在线观看欧美| 国产欧美精品一区二区色综合 | 成人午夜视频福利| 奇米影视一区二区三区| 亚洲线精品一区二区三区| 中文字幕日本不卡| 国产午夜亚洲精品羞羞网站| 欧美一级视频精品观看| 综合在线观看色| 精品毛片乱码1区2区3区| 51午夜精品国产| 在线看不卡av| 在线看一区二区| 日本韩国欧美三级| 91亚洲男人天堂| 成人免费视频免费观看| 国产精品 欧美精品| 蜜乳av一区二区| 日产国产高清一区二区三区| 丝袜国产日韩另类美女| 性做久久久久久免费观看| 一区二区三区精品在线观看| 亚洲少妇30p| 亚洲色图19p| 亚洲丝袜制服诱惑| 一区二区三区日韩精品| 一区二区三区免费网站| 亚洲综合网站在线观看| 亚洲成人av一区二区三区| 亚洲线精品一区二区三区八戒| 亚洲一区二区三区三| 亚洲成人三级小说| 视频一区二区中文字幕| 强制捆绑调教一区二区| 日本在线播放一区二区三区| 美女视频免费一区| 国产综合色在线视频区| 国产91高潮流白浆在线麻豆| 成人av在线播放网址| 99久久99久久综合| 日本高清不卡在线观看| 欧美日韩国产在线观看| 91精品国产综合久久香蕉的特点 | 国产欧美中文在线| 国产精品久久久久久久久久免费看 | av成人动漫在线观看| 91影院在线观看| 欧美日韩一本到| 亚洲精品一区二区三区在线观看 | 国产视频不卡一区| 国产精品久久久久三级| 一区二区三区免费观看| 日本sm残虐另类| 国产suv精品一区二区883| 一本色道综合亚洲| 日韩一区二区影院| 国产精品麻豆欧美日韩ww| 亚洲一区二区三区四区的| 免费不卡在线观看| 成人午夜视频在线| 欧美妇女性影城| 欧美激情一区二区| 亚洲成人综合在线| 国产自产v一区二区三区c| 91丨porny丨国产入口| 91精品国产全国免费观看| 国产女主播视频一区二区| 一区二区不卡在线播放| 国产综合色视频| 欧美主播一区二区三区| 久久久精品人体av艺术| 亚洲福利视频三区| 国产成人啪午夜精品网站男同| 欧美亚洲一区三区| 国产亚洲成aⅴ人片在线观看| 一区二区三区不卡视频在线观看| 久久99精品国产麻豆不卡| 色悠悠久久综合| 久久―日本道色综合久久| 亚洲一区二区不卡免费| 国产成人免费视频一区| 欧美日韩黄色一区二区| 一区二区中文字幕在线| 狠狠色狠狠色合久久伊人| 欧美色倩网站大全免费| 亚洲国产精品精华液2区45| 奇米精品一区二区三区四区| av影院午夜一区| 久久久久久久电影| 日韩高清一区在线| 在线中文字幕一区| 中文字幕乱码日本亚洲一区二区| 日本视频一区二区| 在线观看日韩av先锋影音电影院| 欧美韩国一区二区| 国产在线精品一区二区| 在线电影国产精品| 亚洲电影在线播放| 色综合久久99| 日韩久久一区二区| 成人av网址在线观看| 久久品道一品道久久精品| 捆绑调教美女网站视频一区| 欧美午夜精品一区二区蜜桃| 《视频一区视频二区| 成人深夜在线观看| 国产日本亚洲高清| 国产麻豆精品在线观看| 日韩一区二区电影| 男人的天堂久久精品| 欧美日韩二区三区| 亚洲国产成人av网| 欧美性猛片aaaaaaa做受| 亚洲三级在线观看| 91蝌蚪porny九色| 中文字幕欧美一| 一本久久综合亚洲鲁鲁五月天| 中文在线一区二区| 成人性视频网站| 国产精品久久久久久久浪潮网站| 成人免费看视频| 中文字幕一区二区三区不卡在线| 国产91丝袜在线观看| 亚洲国产成人在线| av电影在线观看一区| 最新国产精品久久精品| 91日韩在线专区| 夜夜揉揉日日人人青青一国产精品 | 99视频一区二区三区| 亚洲色图在线视频| 在线观看视频欧美| 日韩av不卡在线观看| 欧美大黄免费观看| 国产精品18久久久久久久网站| 欧美极品美女视频| 色伊人久久综合中文字幕| 亚洲自拍欧美精品| 91精品国产色综合久久不卡电影| 麻豆精品视频在线观看免费| 久久久精品国产免费观看同学| 粉嫩一区二区三区性色av| 精品一区二区免费在线观看| 久久人人爽人人爽| 91香蕉视频污在线| 视频在线在亚洲| 久久精品视频一区二区| 91免费看`日韩一区二区| 丝袜亚洲另类丝袜在线| 久久人人爽人人爽| 色av综合在线| 麻豆一区二区99久久久久| 日本一区二区三区四区在线视频| 99国内精品久久| 免费欧美在线视频| 亚洲欧洲三级电影| 在线成人免费视频| 成人一区二区在线观看| 亚洲第一成人在线| 欧美激情一区二区三区全黄| 欧美日韩中字一区| 国产东北露脸精品视频| 亚洲一区二区三区影院| 久久精品一区蜜桃臀影院| 在线亚洲免费视频| 国产在线精品不卡| 一片黄亚洲嫩模| 国产亚洲精品aa午夜观看| 欧美影片第一页| 风间由美中文字幕在线看视频国产欧美 | 成人听书哪个软件好| 午夜精品123| 国产精品天天看| 欧美一二区视频| 欧美性生活久久| 成人av资源网站| 久久成人麻豆午夜电影|