[英]Largest palindrome which is product of two n-digit numbers (Python)
這是我的實現,但是給定6位數字時效率不高。
Input : n = 2
Output : 9009
9009是最大的數,是兩個的乘積
2位數字。 9009 = 91 * 99。
def isPali(x):
n = str(x)
for i in range(len(n)):
if not n[i] == n[-i-1]:
return False
return True
def isProduct(x,A):
counter = A
while counter > 1:
if x // counter <= A and x % counter == 0:
return True
else:
counter-=1
return False
def largestProduct(A):
for i in range(A*A,1,-1):
if isPali(i) and isProduct(i,A):
return i
return False
largestProduct(999999)
令x和y為回文數的兩個n位因子。
您可以按降序遍歷它們。
關鍵是要盡快停止,這意味着一旦找到第一個解決方案,您就不會檢查該解決方案下方的任何產品。
def get_max_palindrome(n):
res = 0
for x in range(10 ** n - 1, 1, -1):
for y in range(10 ** n - 1, 1, -1):
p = x * y
if res > p:
break
if str(p) == str(p)[::-1]:
res = p
break
if (x - 1) ** 2 < res:
break
return res
print(get_max_palindrome(6))
在筆記本電腦上以0.378秒執行。
在代碼方面,這並不是太困難:
n = 999999
max_pali =0
t = ()
for i in range(1,n+1):
for j in range(i,n+1):
m = i*j
s = str(m)
if s == s[::-1] and m > max_pali:
max_pali = m
t = (i,j)
print(max_pali,t)
但是,這是一種蠻力方法。 對於6位數字,這不會在合理的時間內終止。 即使可以,我也可以問您同樣的7位或42位數字問題。 我建議您尋找這些數字的某些結構或性質,其倍數是回文。 這樣的一對可以是任何一對數字嗎? 91 * 99 = 9009只是一個巧合,還是有規律?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.