public void LongestCollatzSequenceStartingNumber2Tests()
        {
            Assert.AreEqual(new Tuple <int, int>(1, 1), MathAlgorithms2.LongestCollatzSequenceStartingNumber2(2));
            Assert.AreEqual(new Tuple <int, int>(2, 2), MathAlgorithms2.LongestCollatzSequenceStartingNumber2(3));
            Assert.AreEqual(new Tuple <int, int>(3, 8), MathAlgorithms2.LongestCollatzSequenceStartingNumber2(4));
            Assert.AreEqual(new Tuple <int, int>(3, 8), MathAlgorithms2.LongestCollatzSequenceStartingNumber2(5));
            Assert.AreEqual(new Tuple <int, int>(3, 8), MathAlgorithms2.LongestCollatzSequenceStartingNumber2(6));
            Assert.AreEqual(new Tuple <int, int>(6, 9), MathAlgorithms2.LongestCollatzSequenceStartingNumber2(7));
            Assert.AreEqual(new Tuple <int, int>(7, 17), MathAlgorithms2.LongestCollatzSequenceStartingNumber2(8));
            Assert.AreEqual(new Tuple <int, int>(7, 17), MathAlgorithms2.LongestCollatzSequenceStartingNumber2(9));
            Assert.AreEqual(new Tuple <int, int>(9, 20), MathAlgorithms2.LongestCollatzSequenceStartingNumber2(10));
            Assert.AreEqual(new Tuple <int, int>(9, 20), MathAlgorithms2.LongestCollatzSequenceStartingNumber2(11));
            Assert.AreEqual(new Tuple <int, int>(9, 20), MathAlgorithms2.LongestCollatzSequenceStartingNumber2(12));

            // Test values from https://en.wikipedia.org/wiki/Collatz_conjecture#Examples
            // Note that Wikipedia measures the count of steps while we measure the sequence length such that our values are added one from theirs.
            Assert.AreEqual(new Tuple <int, int>(27, 112), MathAlgorithms2.LongestCollatzSequenceStartingNumber2(28));
            Assert.AreEqual(new Tuple <int, int>(97, 119), MathAlgorithms2.LongestCollatzSequenceStartingNumber2(100));
            Assert.AreEqual(new Tuple <int, int>(871, 179), MathAlgorithms2.LongestCollatzSequenceStartingNumber2(1000));
            Assert.AreEqual(new Tuple <int, int>(6171, 262), MathAlgorithms2.LongestCollatzSequenceStartingNumber2(10000));
            Assert.AreEqual(new Tuple <int, int>(77031, 351), MathAlgorithms2.LongestCollatzSequenceStartingNumber2(100000));

            var theSecret = MathAlgorithms2.LongestCollatzSequenceStartingNumber2(1000000);

            Console.WriteLine($"The longest Collatz sequence with a starting number less than one million starts with {theSecret.Item1} with a lenght of {theSecret.Item2} elements.");
        }
        public void LongestCollatzSequenceStartingNumberTests()
        {
            Assert.AreEqual(new Tuple <int, int>(1, 1), MathAlgorithms2.LongestCollatzSequenceStartingNumber(2));
            Assert.AreEqual(new Tuple <int, int>(2, 2), MathAlgorithms2.LongestCollatzSequenceStartingNumber(3));
            Assert.AreEqual(new Tuple <int, int>(3, 8), MathAlgorithms2.LongestCollatzSequenceStartingNumber(4));
            Assert.AreEqual(new Tuple <int, int>(3, 8), MathAlgorithms2.LongestCollatzSequenceStartingNumber(5));
            Assert.AreEqual(new Tuple <int, int>(3, 8), MathAlgorithms2.LongestCollatzSequenceStartingNumber(6));
            Assert.AreEqual(new Tuple <int, int>(6, 9), MathAlgorithms2.LongestCollatzSequenceStartingNumber(7));
            Assert.AreEqual(new Tuple <int, int>(7, 17), MathAlgorithms2.LongestCollatzSequenceStartingNumber(8));
            Assert.AreEqual(new Tuple <int, int>(7, 17), MathAlgorithms2.LongestCollatzSequenceStartingNumber(9));
            Assert.AreEqual(new Tuple <int, int>(9, 20), MathAlgorithms2.LongestCollatzSequenceStartingNumber(10));
            Assert.AreEqual(new Tuple <int, int>(9, 20), MathAlgorithms2.LongestCollatzSequenceStartingNumber(11));
            Assert.AreEqual(new Tuple <int, int>(9, 20), MathAlgorithms2.LongestCollatzSequenceStartingNumber(12));

            // Test values from https://en.wikipedia.org/wiki/Collatz_conjecture#Examples
            // Note that Wikipedia measures the count of steps while we measure the sequence length such that our values are added one from theirs.
            Assert.AreEqual(new Tuple <int, int>(27, 112), MathAlgorithms2.LongestCollatzSequenceStartingNumber(28));
            Assert.AreEqual(new Tuple <int, int>(97, 119), MathAlgorithms2.LongestCollatzSequenceStartingNumber(100));
            Assert.AreEqual(new Tuple <int, int>(871, 179), MathAlgorithms2.LongestCollatzSequenceStartingNumber(1000));
            Assert.AreEqual(new Tuple <int, int>(6171, 262), MathAlgorithms2.LongestCollatzSequenceStartingNumber(10000));

            // Higher input value 100000 will fail because the sequence will go sufficiently high such that array allocation will fail. A sparsed array approach is required.
        }
 public void PowerDigitsSumEqualityTests()
 {
     Assert.AreEqual(expected: 19316, actual: MathAlgorithms2.SumOfPowerDigitsSumEquals(4));
     Console.WriteLine($"The sum of all the numbers that can be written as the sum of {5}th powers of their digits is {MathAlgorithms2.SumOfPowerDigitsSumEquals(5)}.");
 }