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)}."); }