Exemplo n.º 1
0
	BigInteger operator/(BigInteger& x)
	{
		BigInteger res;
		res.size = size - x.size + 1;//max(size - x.size, size - x.size + 1);//1);

		for(int i = res.size-1; i >= 0; i--)
		{
			int l = 0, r = BASE - 1;
			while(l < r)
			{
				int mid = (l+r)/2;
				res.M[i] = mid;
				
				BigInteger tmp = (x*res);
				
				if(tmp < (*this))
					l = mid+1;
				else
					r = mid;
			}
			res.M[i] = l;
			if(*this < x*res)
			{
				if(res.M[i] == 1)
					res.size--;
				res.M[i]--;
			}
		}

		res.Normalize();
		return res;
	}
Exemplo n.º 2
0
	BigInteger operator-(BigInteger& x)
	{
		BigInteger res;
		res.size = max(size,x.size) + 1;

		for(int i = 0; i < res.size; i++)
			res.M[i] = M[i] - x.M[i];

		res.Normalize();
		return res;
	}
Exemplo n.º 3
0
	BigInteger operator*(BigInteger& x)
	{
		BigInteger res;
		res.size = size + x.size + 2;

 		for(int i = 0; i < size; i++)
			for(int j = 0; j < x.size; j++)
				res.M[i+j] += M[i]*x.M[j];

		res.Normalize();
		return res;
	}
Exemplo n.º 4
0
	BigInteger operator/(int x)
	{
		BigInteger res = *this;
		__int64 mod = 0;
		
		for(int i = size - 1; i >= 0; i--)
		{
			int tmp = mod * BASE + res.M[i];
			res.M[i] = tmp / x;
			mod = tmp % x;
		}
		
		res.Normalize();
		return res;
	}