2016-02-12 85 views
3

免責聲明:這個問題純粹是爲了好玩。可能已經有一個解決方案(我搜索,沒有運氣)。我在下面有幾個問題,我會很感激他們中的任何一個的答案。 RIYL ...兩個整數是否等於一些基數?

我受到前面看到的Three Stooges視頻的啓發,它顯示13x7 = 28。您可能已經看到了它。但是我開始懷疑:是否有一些「基礎」,其中這個等式是真實的(我把基礎放在引號中,因爲我用錯誤的意義來看這個術語..見我的意思是最後一段)?

答案顯然不是,如果我們定義乘法與整數相同。如果你將13分解爲「基數」i,比如13 = 1*i+328 = 2*i+8,倍增係數7確保平等不會發生。

好吧,但現在假設你想問這個問題,有沒有一些基數,兩個數字是相等的,比如說8 = 10(我可能用「base」這個詞錯誤,對不起)?我的意思是,如果我們寫8 = 008 = 0 * 8^2 + 0 * 8 + 8,10 = 010 = 0 * 8^2 + 1 * 8^1 + 0,那麼根據我的(明顯錯誤)使用基數,我們有平等。我寫了一些簡單的代碼,最多3位數字來驗證這一點。但我的代碼糟透了。

''' We define two numbers, such that n1 > n2...tho I'm flexible''' 
n1 = "013" 
n2 = "025" 

''' Set the numbers as arrays. ''' 
num1 = list(range(len(n1))) 
num2 = list(range(len(n2))) 

for i in range(len(n1)): 
    num1[i] = int(n1[i]) 
for i in range(len(n2)): 
    num2[i] = int(n2[i]) 
''' Now we loop until we find a match, or no match is possible. ''' 
i = 1 
j = 0 
while True: 
    t1=(num1[0]*(i**2)+num1[1]*i+num1[2]) 
    t2=(num2[0]*(i**2)+num2[1]*i+num2[2]) 
    ''' We need some way to check if t1 > t2 changes to t1 < t2 at some point 
     or vise-versa -> then we know no match is possible ''' 
    if(i == 1): 
     if t1>t2: 
      j = 0 
     else: j = 1 
    if(t1==t2):   
     print("The numbers are equal in base %d" % i) 
     break 
    if(t2 > t1 and j == 0): 
     print("No base possible! After %d steps" % i) 
     break 
    if(t1 > t2 and j == 1): 
     print("No base possible! After %d steps" % i) 
     break 
    i=i+1 
    if (i > 2**6): 
     print("your search might be hopeless") 
     break 

對不起,如果你的眼睛傷害了那個可怕的代碼。我甚至沒有使用numpy數組。我想知道的是,

  1. 這個問題之前解決了,對於任意數字?如果沒有...

  2. 我想靈活地輸入在n1n2中輸入的位數。是否有更巧妙的方法來定義函數t1t2,以便根據輸入的位數自適應地擴展基地i

  3. 性能明智我相信有一個更好的方式來做我的主要迭代。這對我來說是有趣的部分,加上對第2部分的回答。有什麼建議嗎?

  4. 如果發生t1和t2永遠保持相同的順序,如代碼示例中那樣,迭代將執行2 ^^ 6次。迭代次數是任意選擇的,但可以想象,如果我們擴展到許多數字,則可能需要更多的迭代!當然,有更聰明的方法來停止迭代?

  5. 我的停止條件錯了嗎?

非常感謝您的閱讀。這不是一項家庭作業,答案可能完全無用。我只是對看到一個真正的編碼者的感興趣。如果這不是一個已經解決的問題,這將是整潔。非常喜歡。

+0

你的例子在基數8中不相等,它是兩個不同的基數表示的兩個不同的數字(除了8不是基數8的數字)。你總是可以做到這一點,但這並不意味着你在問什麼。 –

+1

要將基數10中的數字轉換爲其他基數中的數字,可以使用'int(str(number),base)'。 – zondo

+0

我真的不明白,你是否問過在不同基地有兩個數字在一些共同的基地有相同的代表性? –

回答

3

通過應用一點點理論,可以使問題變得更簡單。以你的第一個例子13x7 = 28爲例,我們可以把它展開成一個顯式的多項式:(1n + 3)* 7 = 2n + 8。

如果這個解有真正的根,那麼根就是方程爲真的n(基)的值。如果你喜歡這類問題,那麼你應該閱讀Shoup的計算數論。這是一本有趣的書。

+0

非常酷的阿莫斯,謝謝你的建議。我會想象如果我們高於4位數的整數,所以通過類比四階多項式,這不是一般的平凡嗎?我得看看這本書。 – MathBio

+1

它有可能變得更容易 - 更高階的多項式會使搜索空間變得更加稀疏,但簡單的答案是它們不能被滿足。已經有一段時間了 - 我認識到你的問題有點幸運。 – Amoss

+1

有趣,並反直覺。這裏應用數學傢伙,我知道〜沒有數論。我的第一個想法是必須有一些數字理論對這個大聲笑。例如,在迴歸中,由於搜索中的拓撲復雜性,更高的維度使事情變得非常困難。我不會要求你詳細說明如何在更高維度上更容易,我可能會查找你推薦的書。最近我遇到了一些更高維度的根發現問題,與雙曲線PDES有關,所以我必須找出一種方法來做到這一點。再次感謝和祝福。 – MathBio

相關問題