SOME基数中两个整数是否相等?

时间:2016-02-12 18:37:48

标签: python algorithm math

免责声明:这个问题纯粹是为了好玩。可能已经有了解决方案(我搜索过,没有运气)。我有几个问题,我很感激他们中的任何一个答案。 RIYL ...

我的灵感来自于我之前看到的三个Stooges视频,其中显示13x7 = 28.你可能已经看过了。但我开始疑惑:是否有一些“基础”,其中这个等式是正确的(我把基数放在引文中,因为我在错误的意义上使用了这个术语。看看我的意思的最后一段)?

如果我们定义乘法与整数相同,答案显然是否定的。如果你将13分为“基数”i,比如说13 = 1*i+328 = 2*i+8,则乘法因子为7可确保不会发生相等。

好的,但是现在假设你想问这个问题,是否存在两个数字相等的基数,比如8 = 10(我可能使用“基数”这个词错了,对不起)?

我的意思是,如果我们写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. 我的停止条件是错的吗?

  6. 非常感谢阅读。这不是家庭作业,答案可能完全没用。我只是想看到真正的程序员对它的看法。如果这不是一个已经解决的问题,那将是很好的。非常爱。

1 个答案:

答案 0 :(得分:3)

通过应用一些理论,你可以使问题更简单。以你的第一个例子13x7 = 28为例,我们可以将它扩展为基数上的显式多项式:(1n + 3)* 7 = 2n + 8.

如果此解具有真正的根,则根是n(基数)的值,其等式为真。如果您喜欢这类问题,那么您应该阅读Shoup的计算数论。这是一本有趣的书。