Exemplo n.º 1
0
		//root function
		public BigInteger root(int order)
		{

			uint numBits = (uint)this.bitCount();

			if ((numBits & 0x1) != 0) // odd number of bits
				numBits = (numBits >> 1) + 1;
			else
				numBits = (numBits >> 1);

			uint bytePos = numBits >> 5;
			byte bitPos = (byte)(numBits & 0x1F);

			uint mask;

			BigInteger result = new BigInteger();
			if (bitPos == 0)
				mask = 0x80000000;
			else
			{
				mask = (uint)1 << bitPos;
				bytePos++;
			}
			result.dataLength = (int)bytePos;

			for (int i = (int)bytePos - 1; i >= 0; i--)
			{
				while (mask != 0)
				{
					// guess
					result.data[i] ^= mask;

					// undo the guess if its square is larger than this
					if ((result.Pow(order)) > this)
						result.data[i] ^= mask;

					mask >>= 1;
				}
				mask = 0x80000000;
			}
			return result;
		}
Exemplo n.º 2
0
		/// <summary>
		/// Raises the current number to the power specified.
		/// </summary>
		/// <param name="number">The number to be raised.</param>
		/// <param name="raisedTo">The power to be raised to.</param>
		/// <returns>
		/// A BigInteger representing this raised to a power
		/// </returns>
		public static BigInteger Pow(BigInteger number, BigInteger raisedTo)
		{
			return number.Pow(raisedTo);
		}