(A) Two different five digit base ten numbers M and N are constituted entirely by even digits.
What is the least value of M+N, given that M*N is a perfect square?
(B) Two different five digit numbers M and N are constituted entirely by odd digits.
What is the least value of M+N, given that M*N is a perfect square?
Algorithm:
two programs, one for evens, another for odds
build lists of numbers with all even and all odd digits
search more efficiently by breaking out of a loop once the current sum is larger than the minimum sum found so far
(A): 20000+20402 = 40402 = 20200^2
(B): 11999+15975= 27974= 13845^2
---------------
Printout of program:
[20000, 20402, 40402, 20200.0]
Answer for evens
[20000, 20402, 40402, 20200.0]
[11111, 99999, 111110, 33333.0]
[11191, 19375, 30566, 14725.0]
[11999, 15975, 27974, 13845.0]
Answer for odds
[11999, 15975, 27974, 13845.0]
squares = [i*i for i in range(10000, 100000)]
eDigits = []
for a in [2,4,6,8]:
for b in [0,2,4,6,8]:
for c in [0,2,4,6,8]:
for d in [0,2,4,6,8]:
for e in [0,2,4,6,8]:
eDigits.append(10000*a+1000*b+100*c+10*d+e)
oDigits = []
for a in [1,3,5,7,9]:
for b in [1,3,5,7,9]:
for c in [1,3,5,7,9]:
for d in [1,3,5,7,9]:
for e in [1,3,5,7,9]:
oDigits.append(10000*a+1000*b+100*c+10*d+e)
lenEvens = len(eDigits)
lenOdds = len(oDigits)
esolutions = []
osolutions = []
minsum = 10000000
for i in range(lenEvens):
if eDigits[i] > minsum/2:
break
for j in range(i+1, lenEvens):
thissum = eDigits[i]+eDigits[j]
if thissum > minsum:
break
eprod = eDigits[i]*eDigits[j]
if eprod in squares:
if thissum < minsum:
minsum = thissum
esolutions.append([eDigits[i],eDigits[j],thissum,(eprod)**.5])
print([eDigits[i],eDigits[j],thissum,(eprod)**.5])
break
print('Answer for evens')
for s in esolutions:
if s[2] == minsum:
print(s)
print('
')
minsum = 10000000
for i in range(lenOdds):
if oDigits[i] > minsum/2:
break
for j in range(i+1, lenOdds):
thissum = oDigits[i]+oDigits[j]
if thissum > minsum:
break
oprod = oDigits[i]*oDigits[j]
if oprod in squares:
if thissum < minsum:
minsum = thissum
osolutions.append([oDigits[i],oDigits[j],thissum,(oprod)**.5])
print([oDigits[i],oDigits[j],thissum,(oprod)**.5])
break
print('Answer for odds')
for s in osolutions:
if s[2] == minsum:
print(s)
Edited on September 8, 2023, 8:47 am
|
Posted by Larry
on 2023-09-08 08:46:11 |