BigInteger shifting mapped to constants for an improved performance.
This commit is contained in:
1 parent
cc8bb98e2c
commit
dfd3f71f5d
4 files changed
+670
-9
No files matched your search
@@ -0,0 +1,146 @@
|
||||
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"),
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user