re: Project Euler #4 - Largest Palindrome Product VIEW POST

Sooo... there are so many good solutions, but they all kind of look the same, so I wanted a different approach 😁

What if, instead of starting with the factors and checking if their product is a palindrome, we start with palindromes and find two 3-digit factors?

We'd start with 999999, then 998899, then 997799... You get the point. So we can start with a 3-digit number (e.g. 356)... and get a palindrome out of it (e.g. 356653), and look for factors.

My solution in JavaScript:

``````const digits = 3;
const upper = 10 ** digits - 1;   // 999
const lower = 10 ** (digits - 1); // 100
function palindromize(num) {
}

let p, b;
out: for (let a = upper; a >= lower; a--) {
p = palindromize(a);
for (b = Math.floor(p ** .5); p/b <= upper; b--) {
if (p % b === 0) break out;
}
}
console.log(p / b, b);
``````

I've tested it with up to 7 digits and it's still basically instantaneous. Over that limit you go over `Number.MAX_SAFE_INTEGER` and it becomes unreliable. I didn't bother using `BigInt`s, also because you can't get the square root out of them (you can approximate it, but it's a bother).

P.S.: yes, I've used a label in JavaScript. Sue me 😂 (also useful if you have to break out of more than one cycle... which is usually rare).

code of conduct - report abuse