public void TestIsPowerOfTwo32() { for (int i = 2; i < 31; i++) { int x = 1 << i; Assert.IsTrue(IntegerTheory.IsPowerOfTwo(x), x + " (+)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(x - 1), x + "-1 (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(x + 1), x + "+1 (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(-x), "-" + x + " (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(-x + 1), "-" + x + "+1 (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(-x - 1), "-" + x + "-1 (-)"); } Assert.IsTrue(IntegerTheory.IsPowerOfTwo(4), "4 (+)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(3), "3 (-)"); Assert.IsTrue(IntegerTheory.IsPowerOfTwo(2), "2 (+)"); Assert.IsTrue(IntegerTheory.IsPowerOfTwo(1), "1 (+)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(0), "0 (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(-1), "-1 (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(-2), "-2 (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(-3), "-3 (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(-4), "-4 (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(Int32.MinValue), "Int32.MinValue (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(Int32.MinValue + 1), "Int32.MinValue+1 (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(Int32.MaxValue), "Int32.MaxValue (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(Int32.MaxValue - 1), "Int32.MaxValue-1 (-)"); }
public void TestIsPowerOfTwo64() { for (int i = 2; i < 63; i++) { long x = ((long)1) << i; Assert.IsTrue(IntegerTheory.IsPowerOfTwo(x), x + " (+)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(x - 1), x + "-1 (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(x + 1), x + "+1 (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(-x), "-" + x + " (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(-x + 1), "-" + x + "+1 (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(-x - 1), "-" + x + "-1 (-)"); } Assert.IsTrue(IntegerTheory.IsPowerOfTwo((long)4), "4 (+)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo((long)3), "3 (-)"); Assert.IsTrue(IntegerTheory.IsPowerOfTwo((long)2), "2 (+)"); Assert.IsTrue(IntegerTheory.IsPowerOfTwo((long)1), "1 (+)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo((long)0), "0 (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo((long)-1), "-1 (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo((long)-2), "-2 (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo((long)-3), "-3 (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo((long)-4), "-4 (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(Int64.MinValue), "Int32.MinValue (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(Int64.MinValue + 1), "Int32.MinValue+1 (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(Int64.MaxValue), "Int32.MaxValue (-)"); Assert.IsFalse(IntegerTheory.IsPowerOfTwo(Int64.MaxValue - 1), "Int32.MaxValue-1 (-)"); }
/// <summary> /// Run example /// </summary> public void Run() { // 1. Find out whether the provided number is an even number Console.WriteLine(@"1. Find out whether the provided number is an even number"); Console.WriteLine(@"{0} is even = {1}. {2} is even = {3}", 1, IntegerTheory.IsEven(1), 2, 2.IsEven()); Console.WriteLine(); // 2. Find out whether the provided number is an odd number Console.WriteLine(@"2. Find out whether the provided number is an odd number"); Console.WriteLine(@"{0} is odd = {1}. {2} is odd = {3}", 1, 1.IsOdd(), 2, IntegerTheory.IsOdd(2)); Console.WriteLine(); // 3. Find out whether the provided number is a perfect power of two Console.WriteLine(@"2. Find out whether the provided number is a perfect power of two"); Console.WriteLine(@"{0} is power of two = {1}. {2} is power of two = {3}", 5, 5.IsPowerOfTwo(), 16, IntegerTheory.IsPowerOfTwo(16)); Console.WriteLine(); // 4. Find the closest perfect power of two that is larger or equal to 97 Console.WriteLine(@"4. Find the closest perfect power of two that is larger or equal to 97"); Console.WriteLine(97.CeilingToPowerOfTwo()); Console.WriteLine(); // 5. Raise 2 to the 16 Console.WriteLine(@"5. Raise 2 to the 16"); Console.WriteLine(16.PowerOfTwo()); Console.WriteLine(); // 6. Find out whether the number is a perfect square Console.WriteLine(@"6. Find out whether the number is a perfect square"); Console.WriteLine(@"{0} is perfect square = {1}. {2} is perfect square = {3}", 37, 37.IsPerfectSquare(), 81, IntegerTheory.IsPerfectSquare(81)); Console.WriteLine(); // 7. Compute the greatest common divisor of 32 and 36 Console.WriteLine(@"7. Returns the greatest common divisor of 32 and 36"); Console.WriteLine(IntegerTheory.GreatestCommonDivisor(32, 36)); Console.WriteLine(); // 8. Compute the greatest common divisor of 492, -984, 123, 246 Console.WriteLine(@"8. Returns the greatest common divisor of 492, -984, 123, 246"); Console.WriteLine(IntegerTheory.GreatestCommonDivisor(492, -984, 123, 246)); Console.WriteLine(); // 9. Compute the extended greatest common divisor "z", such that 45*x + 18*y = z Console.WriteLine(@"9. Compute the extended greatest common divisor Z, such that 45*x + 18*y = Z"); long x, y; var z = IntegerTheory.ExtendedGreatestCommonDivisor(45, 18, out x, out y); Console.WriteLine(@"z = {0}, x = {1}, y = {2}. 45*{1} + 18*{2} = {0}", z, x, y); Console.WriteLine(); // 10. Compute the least common multiple of 16 and 12 Console.WriteLine(@"10. Compute the least common multiple of 16 and 12"); Console.WriteLine(IntegerTheory.LeastCommonMultiple(16, 12)); Console.WriteLine(); }