using System.Numerics; namespace PerfectNumbers.Core { public static class Pow2Provider { public static BigInteger BigInteger(int i) => i switch { 0 => System.Numerics.BigInteger.One, 1 => BigIntegerNumbers.Two, 2 => BigIntegerNumbers.Pow2Exact2, 3 => BigIntegerNumbers.Pow2Exact3, 4 => BigIntegerNumbers.Pow2Exact4, 5 => BigIntegerNumbers.Pow2Exact5, 6 => BigIntegerNumbers.Pow2Exact6, 7 => BigIntegerNumbers.Pow2Exact7, 8 => BigIntegerNumbers.Pow2Exact8, 9 => BigIntegerNumbers.Pow2Exact9, 10 => BigIntegerNumbers.Pow2Exact10, 11 => BigIntegerNumbers.Pow2Exact11, 12 => BigIntegerNumbers.Pow2Exact12, 13 => BigIntegerNumbers.Pow2Exact13, 14 => BigIntegerNumbers.Pow2Exact14, 15 => BigIntegerNumbers.Pow2Exact15, 16 => BigIntegerNumbers.Pow2Exact16, 17 => BigIntegerNumbers.Pow2Exact17, 18 => BigIntegerNumbers.Pow2Exact18, 19 => BigIntegerNumbers.Pow2Exact19, 20 => BigIntegerNumbers.Pow2Exact20, 21 => BigIntegerNumbers.Pow2Exact21, 22 => BigIntegerNumbers.Pow2Exact22, 23 => BigIntegerNumbers.Pow2Exact23, 24 => BigIntegerNumbers.Pow2Exact24, 25 => BigIntegerNumbers.Pow2Exact25, 26 => BigIntegerNumbers.Pow2Exact26, 27 => BigIntegerNumbers.Pow2Exact27, 28 => BigIntegerNumbers.Pow2Exact28, 29 => BigIntegerNumbers.Pow2Exact29, 30 => BigIntegerNumbers.Pow2Exact30, 31 => BigIntegerNumbers.Pow2Exact31, 32 => BigIntegerNumbers.Pow2Exact32, 33 => BigIntegerNumbers.Pow2Exact33, 34 => BigIntegerNumbers.Pow2Exact34, 35 => BigIntegerNumbers.Pow2Exact35, 36 => BigIntegerNumbers.Pow2Exact36, 37 => BigIntegerNumbers.Pow2Exact37, 38 => BigIntegerNumbers.Pow2Exact38, 39 => BigIntegerNumbers.Pow2Exact39, 40 => BigIntegerNumbers.Pow2Exact40, 41 => BigIntegerNumbers.Pow2Exact41, 42 => BigIntegerNumbers.Pow2Exact42, 43 => BigIntegerNumbers.Pow2Exact43, 44 => BigIntegerNumbers.Pow2Exact44, 45 => BigIntegerNumbers.Pow2Exact45, 46 => BigIntegerNumbers.Pow2Exact46, 47 => BigIntegerNumbers.Pow2Exact47, 48 => BigIntegerNumbers.Pow2Exact48, 49 => BigIntegerNumbers.Pow2Exact49, 50 => BigIntegerNumbers.Pow2Exact50, 51 => BigIntegerNumbers.Pow2Exact51, 52 => BigIntegerNumbers.Pow2Exact52, 53 => BigIntegerNumbers.Pow2Exact53, 54 => BigIntegerNumbers.Pow2Exact54, 55 => BigIntegerNumbers.Pow2Exact55, 56 => BigIntegerNumbers.Pow2Exact56, 57 => BigIntegerNumbers.Pow2Exact57, 58 => BigIntegerNumbers.Pow2Exact58, 59 => BigIntegerNumbers.Pow2Exact59, 60 => BigIntegerNumbers.Pow2Exact60, 61 => BigIntegerNumbers.Pow2Exact61, 62 => BigIntegerNumbers.Pow2Exact62, 63 => BigIntegerNumbers.Pow2Exact63, _ => throw new ArgumentOutOfRangeException(nameof(i), $"Parameter value {i} is incorrect"), }; public static BigInteger BigIntegerMinusOne(int i) => i switch { 0 => System.Numerics.BigInteger.Zero, 1 => BigIntegerNumbers.Pow2MinusOne1, 2 => BigIntegerNumbers.Pow2MinusOne2, 3 => BigIntegerNumbers.Pow2MinusOne3, 4 => BigIntegerNumbers.Pow2MinusOne4, 5 => BigIntegerNumbers.Pow2MinusOne5, 6 => BigIntegerNumbers.Pow2MinusOne6, 7 => BigIntegerNumbers.Pow2MinusOne7, 8 => BigIntegerNumbers.Pow2MinusOne8, 9 => BigIntegerNumbers.Pow2MinusOne9, 10 => BigIntegerNumbers.Pow2MinusOne10, 11 => BigIntegerNumbers.Pow2MinusOne11, 12 => BigIntegerNumbers.Pow2MinusOne12, 13 => BigIntegerNumbers.Pow2MinusOne13, 14 => BigIntegerNumbers.Pow2MinusOne14, 15 => BigIntegerNumbers.Pow2MinusOne15, 16 => BigIntegerNumbers.Pow2MinusOne16, 17 => BigIntegerNumbers.Pow2MinusOne17, 18 => BigIntegerNumbers.Pow2MinusOne18, 19 => BigIntegerNumbers.Pow2MinusOne19, 20 => BigIntegerNumbers.Pow2MinusOne20, 21 => BigIntegerNumbers.Pow2MinusOne21, 22 => BigIntegerNumbers.Pow2MinusOne22, 23 => BigIntegerNumbers.Pow2MinusOne23, 24 => BigIntegerNumbers.Pow2MinusOne24, 25 => BigIntegerNumbers.Pow2MinusOne25, 26 => BigIntegerNumbers.Pow2MinusOne26, 27 => BigIntegerNumbers.Pow2MinusOne27, 28 => BigIntegerNumbers.Pow2MinusOne28, 29 => BigIntegerNumbers.Pow2MinusOne29, 30 => BigIntegerNumbers.Pow2MinusOne30, 31 => BigIntegerNumbers.Pow2MinusOne31, 32 => BigIntegerNumbers.Pow2MinusOne32, 33 => BigIntegerNumbers.Pow2MinusOne33, 34 => BigIntegerNumbers.Pow2MinusOne34, 35 => BigIntegerNumbers.Pow2MinusOne35, 36 => BigIntegerNumbers.Pow2MinusOne36, 37 => BigIntegerNumbers.Pow2MinusOne37, 38 => BigIntegerNumbers.Pow2MinusOne38, 39 => BigIntegerNumbers.Pow2MinusOne39, 40 => BigIntegerNumbers.Pow2MinusOne40, 41 => BigIntegerNumbers.Pow2MinusOne41, 42 => BigIntegerNumbers.Pow2MinusOne42, 43 => BigIntegerNumbers.Pow2MinusOne43, 44 => BigIntegerNumbers.Pow2MinusOne44, 45 => BigIntegerNumbers.Pow2MinusOne45, 46 => BigIntegerNumbers.Pow2MinusOne46, 47 => BigIntegerNumbers.Pow2MinusOne47, 48 => BigIntegerNumbers.Pow2MinusOne48, 49 => BigIntegerNumbers.Pow2MinusOne49, 50 => BigIntegerNumbers.Pow2MinusOne50, 51 => BigIntegerNumbers.Pow2MinusOne51, 52 => BigIntegerNumbers.Pow2MinusOne52, 53 => BigIntegerNumbers.Pow2MinusOne53, 54 => BigIntegerNumbers.Pow2MinusOne54, 55 => BigIntegerNumbers.Pow2MinusOne55, 56 => BigIntegerNumbers.Pow2MinusOne56, 57 => BigIntegerNumbers.Pow2MinusOne57, 58 => BigIntegerNumbers.Pow2MinusOne58, 59 => BigIntegerNumbers.Pow2MinusOne59, 60 => BigIntegerNumbers.Pow2MinusOne60, 61 => BigIntegerNumbers.Pow2MinusOne61, 62 => BigIntegerNumbers.Pow2MinusOne62, 63 => BigIntegerNumbers.Pow2MinusOne63, 1024 => BigIntegerNumbers.Pow2MinusOne1024, _ => throw new ArgumentOutOfRangeException(nameof(i), $"Parameter value {i} is incorrect"), }; } }