Вопрос по проекту Эйлера. (задание 4)
A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 × 99.
Find the largest palindrome made from the product of two 3-digit numbers.
Я не уверен, можно ли это вешать сюда, но просто поток моих идей для задачи иссяк. Помогите найти ошибку и вообще оцените работу.
pasaranax,
pochechyev или
Griffon, если вы это решали и у Вас был другой, совсем другой подход к задаче (просто у меня - перебор вариантов), то скажите хотя бы, о чем подумать.
Программа упорно выводит, что ответом к вышеприведенной задаче является палиндром 749947 = 863 * 869
>>> def prime_factors_of_n(n):
k = 2
prime_factors = []
while n != 1 or n >= k:
x = n % k
if x == 0:
prime_factors.append(k)
n = n / k
else:
k += 1
for digit in prime_factors:
z = k % digit
if z == 0:
k += 1
else:
pass
return prime_factors
>>> palindrome = 999999
>>> result = prime_factors_of_n(palindrome)
>>> l = 1
>>> a = 0
>>> b = 0
>>> while a == 0 and b == 0:
while l <= len(result): # counting multiples
current_right_result = result[l:]
current_left_result = result[:l]
mult1 = 1
mult2 = 1
for i in current_right_result:
mult1 = mult1 * i
for i in current_left_result:
mult2 = mult2 * i
mult1 = str(mult1)
mult2 = str(mult2)
if len(mult1) == 3 and len(mult2) == 3:
a = int(mult1)
b = int(mult2)
l = len(result)
break
else:
l += 1
if a != 0 and b != 0:
break
else: # reduce palindrome
l = 1
palindrome = str(palindrome)
palindrome = list(palindrome)
index = -len(palindrome)
while index != 0:
for i in palindrome:
palindrome[index] = int(palindrome[index])
index += 1
if len(palindrome) == 6:
if palindrome[2] != 0:
print palindrome
palindrome[2] = palindrome[2] - 1
palindrome[3] = palindrome[3] - 1
elif palindrome[2] == 0 and palindrome[1] != 0:
print palindrome
palindrome[2] = 9
palindrome[3] = 9
palindrome[1] = palindrome[1] - 1
palindrome[4] = palindrome[4] - 1
else:
print palindrome
palindrome[2] = 9
palindrome[3] = 9
palindrome[1] = 9
palindrome[4] = 9
palindrome[0] = palindrome[0] - 1
palindrome[5] = palindrome[5] - 1
else:
print "Having a 5 digit palindrome!(Havin BIG problems)"
# making a new palindrome
index = -len(palindrome)
while index != 0:
for i in palindrome:
palindrome[index] = str(palindrome[index])
index += 1
new_palindrome = ""
for i in palindrome:
new_palindrome += i
palindrome = int(new_palindrome)
result = prime_factors_of_n(palindrome)
ответник проекта Эйлера другой. Как я пропустил нужный палиндром?