// IBM "Ponder This" challenge, 2010-04 // // http://domino.research.ibm.com/Comm/wwwr_ponder.nsf/challenges/April2010.html // // The prime number 4535653, when translated to base 16, gives the hexadecimal // number 0x453565, which has the same digits as the original number, omitting // the last digit. // Find another example of a prime number that, translated to hexadecimal, // yields the same digits, omitting the last 21 digits. //a = 1.09649*10^124 a = 10.^124 digits = 1 testNum[1e124, 1e135, digits] //setPrecision[180] testNum[lower, upper, digits] := { wasPos = false a = lower last = lower nextLast = lower lastDiff = a // setPrecision[digits+5] stepsize = 1.0 + 10^-(digits+3) println["Searching from\n\$lower\n\$upper"] println["Stepsize is \$stepsize, digits are \$digits"] do { fa = "\$a" a = floor[a] astr = "\$a" n = hex[a] atstr = left[astr, length[astr]-21] if length[n] == length[atstr] and left[n,digits] == left[atstr,digits] { diff = (parseInt[atstr,16] - a) println[] isPos = diff > 0 println["\n\$fa"] println[n] println[atstr] println[length[atstr] + " digits, diff = " + (1.0 diff)] if (!isPos) if wasPos { println["====================="] if (last != undef) testNum[nextLast, a+100000000, digits+1] println["=======FAIL at \$digits========="] // println["digits are \$digits"] // setPrecision[digits + 5] } wasPos = isPos } nextLast = last last = a a = a * stepsize } while a<=upper }