Exemplo n.º 1
0
BigInt BigInt::PowModN(BigInt a, BigInt k, BigInt n)
{
	BigInt A = a, b = BigInt("1");
	
	if (k == 0) return b;
	if (k.Number[0] == 1) b = a;


	for (ll i = 1; i < k.Number.size(); i++) {
		A = A.KaratsubaMultiply(A) % n;
		if (k.Number[i]) b = A.KaratsubaMultiply(b) % n;
	}
	
	return b;
}
Exemplo n.º 2
0
BigInt	BigInt::PollardP_get_factor(BigInt N)
{
	srand(time(NULL));

	ll x0_tmp = rand();
	BigInt x;
	x = x0_tmp;
	x = x%N;
	BigInt y("1");
	ll stage = 2;
	ll i = 0;
	while (gcd(N, x - y) == BigInt("1"))
	{
		if (i == stage)
		{
			y = x;
			stage *= 2;
		}
		x = (x.KaratsubaMultiply(x) + BigInt("1")) % N;
		i++;
	}
	return gcd(N, x - y);
}