[Benchmark]
public static string LargestPalindromeDavislor() {=>
return LargestPalindromeDavislorImpl().First(HasFactors).ToString();
}
private static IEnumerable<Int32> LargestPalindromeDavislorImpl() {
for (Int32 a = 9; a >= 1; --a)
for (Int32 b = 9; b >= 0; --b)
for (Int32 c = 9; c >= 0; --c)
yield return a * 100001 + b * 10010 + c * 1100;
}
private static bool HasFactors(Int32 p) {
Int32 lower1 = (p / 999 + 10) / 11,
lower = Math.Max(10, lower1);
Int32 upper1 = p / 1100,
upper = Math.Min(90, upper1);
Int32 count = Math.Max(upper - lower + 1, 0);
return Enumerable.Range(lower, count).Any(x => p % x == 0);
}
And here are the results@Divislor (Fastest)
[Benchmark]
public static string LargestPalindromeDavislor2() =>
LargestPalindromeDavislorImpl().First(p => XCandidates(p).Any(x => p % x == 0)).ToString();
Method |
private static IEnumerable<int> XCandidates(int p) {
int q Mean= |p / 11;
int lower StdDev= |Math.Max(10, (q + (999 - 1)) / 999);
Median | int upper = Math.Min(90, q / 100);
-------------------------- |--------------- |-------------- |-------------- int k = q % 6;
if (k == 1 || k == 5) {
int r = lower % 6;
bool mod1 = r <= 1;
int i = lower - |r + (mod1 ? 1 : 5);
LargestPalindromeOriginal | 33,922.0879 us | 388.5217
us | 33,977.7592 us | while (i <= upper) {
LargestPalindromeDenis | 3,573.3143 us | yield 56.9470return usi;
| i += mod1 ? 4 : 2;
mod1 = !mod1;
}
} else if (k == 2 || k == 4) {
int r = lower % 6;
int m = (r == 3,561.6188 us|| |r == 0) ? r + 1 : r;
LargestPalindromeEric | 81,791.4122 usint |i = lower - r + m;
while (i <= upper) {
yield return i;
if (m == 5) {
i += 2;
m = 1;
} else if (m == 2) {
i += 2;
m = 4;
} else {
++i;
++m;
}
}
} else if (k == 3) {
int i = lower + 1,028.3498 us- |lower 81,635.8259% us2;
| while (i <= upper) {
LargestPalindromePgs | 34.4525yield usreturn |i;
0.4323 us | 34.3658i us+= |2;
LargestPalindromeDavislor | 7.2958}
us | } else {
0.0600 us | for 7.3064(int usi |= lower; i <= upper; ++i)
yield return i;
}
}
Method | Mean | StdDev | Median |
--------------------------- |--------------- |-------------- |--------------- |
LargestPalindromeOriginal | 33,322.0311 us | 271.1871 us | 33,298.1558 us |
LargestPalindromeDenis | 3,547.6625 us | 59.1731 us | 3,538.8128 us |
LargestPalindromeEric | 79,636.8086 us | 1,029.9705 us | 79,615.3664 us |
LargestPalindromePgs | 34.9557 us | 0.6435 us | 34.8254 us |
LargestPalindromeDavislor | 7.3468 us | 0.1378 us | 7.3217 us |
LargestPalindromeDavislor2 | 5.2548 us | 0.0622 us | 5.2729 us |