public static BigInteger Random(this Random generator, BigInteger limit) { ContractUtils.Requires(limit.Sign > 0, "limit"); ContractUtils.RequiresNotNull(generator, "generator"); // TODO: this doesn't yield a uniform distribution (small numbers will be picked more frequently): uint[] result = new uint[limit.GetWordCount() + 1]; for (int i = 0; i < result.Length; i++) { result[i] = unchecked((uint)generator.Next()); } return new BigInteger(1, result) % limit; }
public static int Size(BigInteger/*!*/ self) { return self.GetWordCount() * 4; }