コード例 #1
0
ファイル: class.cpp プロジェクト: Sebastian33/sccm
doubleBigInt bigInt::power(bigInt b)
{
	doubleBigInt res=bigInt(1);
	uint mask;
	int begin,hb=b.higherBitNum();

	for(int i = hb / (sizeof(uint) * 8); i >= 0; i--)
	{
		if(i == (hb / (sizeof(uint)*8)))
		{
			begin = hb % (sizeof(uint) * 8);
			mask=1UL<<hb ;
		}
		else
		{
			begin = sizeof(uint) * 8 - 1; 
			mask=1<<(sizeof(uint) * 8 - 1);
		}
		
		for ( int j = begin; j >= 0; j--)
		{
			res = res.s();
			if(mask & b.a[i])
				res=res.m(*this);
			mask=mask>>1;
		}
	}
	return res;
}
コード例 #2
0
ファイル: class.cpp プロジェクト: Sebastian33/sccm
doubleBigInt bigInt::mul(bigInt b)
{
	doubleBigInt res,btmp;
	unsigned long long int tmp,m1,m2;
	uint mask = -1,tmp1, sizeOfWord = sizeof(uint) * 8;
	for (int i = 0; i < size; i++)
	{
		tmp = 0;
		m2 = b.a[i];
		for (int j = 0; j < size; j++)
		{
			m1 = a[j];
			tmp += (m1 * m2); 
			tmp1=tmp&mask;
			btmp.setWord(tmp1,j);
			tmp = tmp >> (sizeOfWord);
		}
		btmp.setWord(tmp & mask,size);
		
		btmp.Shift(i * sizeOfWord);
		
		res = res + btmp;
		btmp = bigInt(0);
	}
	return res;
}
コード例 #3
0
ファイル: checkPrime.cpp プロジェクト: AntonGitName/RSA
int getDD1(const bigInt &n) // changed
{
    int dd;
	for (int d_abs = 5, d_sign = 1; ; d_sign = -d_sign, ++++d_abs)
	{
		dd = d_abs * d_sign;
		bigInt g = gcd (n, d_abs);
		if (1 < g && g < n)
			// нашли делитель - d_abs
			return false;
		if (jacobi (bigInt(dd), n) == -1)
			break;
	}
    return dd;
}