The smallest number of steps that I could get is 375. Consider multiplying the three-digit number a1a2a3 by the three-digit number, b1b2b3 :
JavaScript Code:
var modHash = new Array(10); var iterations = 0; for (var i=1; i<10; i++){ modHash[i] = {0: [0]} for (var j=1; j<10; j++){ iterations ++; var r = i * j % 10; if (modHash[i][r]) modHash[i][r].push(j); else modHash[i][r] = [j]; } } var highest = 0; function multiples(x,y,carry,mod){ for (var i in modHash[x]){ var m = (10 + mod - i - carry) % 10; if (modHash[y][m]){ for (var j in modHash[x][i]){ for (var k in modHash[y][m]){ iterations ++; var palindrome = num(9,modHash[y][m][k],x,9,modHash[x][i][k],y); if (x == 3 && mod == 0){ console.log(x + " * " + modHash[x][i][j] + " + " + y + " * " + modHash[y][m][k] + ": " + palindrome); } var str = String(palindrome); if (str == str.split("").reverse().join("") && palindrome > highest){ highest = palindrome; } } } } } } function num(a1,a2,a3,b1,b2,b3){ return (100*a1 + 10*a2 + a3) * (100*b1 + 10*b2 + b3); } var a3b3s = [[7,7,4],[9,1,0],[3,3,0]]; for (var i in a3b3s){ for (var mod=0; mod<10; mod++){ var x = a3b3s[i][0], y = a3b3s[i][1], carry = a3b3s[i][2]; multiples(x,y,carry,mod); } } console.log(highest); console.log("iterations: " + iterations);
Conclusion:
3 * 0 + 3 * 0: 815409 3 * 7 + 3 * 3: 907809 3 * 4 + 3 * 6: 908109 3 * 1 + 3 * 9: 906609 3 * 8 + 3 * 2: 907309 3 * 5 + 3 * 5: 908209 3 * 2 + 3 * 8: 907309 3 * 9 + 3 * 1: 906609 3 * 6 + 3 * 4: 908109 3 * 3 + 3 * 7: 907809 906609 iterations: 375
source share