2016-02-12 64 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

相关问题