簡體   English   中英

最大回文集,是兩個n位數字的乘積(Python)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM