Python 两个整数在某个基数中相等吗?
免责声明:此问题纯粹是为了好玩。可能已经有了解决方案(我已经搜索过了,没有运气)。下面我有几个问题,如果您能回答,我将不胜感激。里尔 我的灵感来源于我之前看到的一段三个走狗的视频,其中显示13x7=28。你可能已经看到了。但我开始想:这个等式是否有一个“基础”是正确的(我把基础放在引文中,因为我用错了这个词……我的意思见最后一段) 答案显然是否定的,如果我们将乘法定义为与整数相同。如果你把13分解成“基”i,比如说Python 两个整数在某个基数中相等吗?,python,algorithm,math,Python,Algorithm,Math,免责声明:此问题纯粹是为了好玩。可能已经有了解决方案(我已经搜索过了,没有运气)。下面我有几个问题,如果您能回答,我将不胜感激。里尔 我的灵感来源于我之前看到的一段三个走狗的视频,其中显示13x7=28。你可能已经看到了。但我开始想:这个等式是否有一个“基础”是正确的(我把基础放在引文中,因为我用错了这个词……我的意思见最后一段) 答案显然是否定的,如果我们将乘法定义为与整数相同。如果你把13分解成“基”i,比如说13=1*i+3,和28=2*i+8,那么乘法因子7确保不会发生相等 好的,但是现
13=1*i+3
,和28=2*i+8
,那么乘法因子7确保不会发生相等
好的,但是现在假设你想问一个问题,两个数字相等时是否有基数,比如说8=10(我可能用错了“基数”这个词,对不起)
我的意思是,如果我们写8=008=0*8^2+0*8+8,10=010=0*8^2+1*8^1+0,那么根据我对base的用法(显然是错误的),我们是相等的。我写了一些简单的代码,最多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
''我们定义了两个数字,使得n1>n2…尽管我很灵活''
n1=“013”
n2=“025”
''将数字设置为数组''
num1=列表(范围(len(n1)))
num2=列表(范围(len(n2)))
对于范围内的i(len(n1)):
num1[i]=int(n1[i])
对于范围内的i(len(n2)):
num2[i]=int(n2[i])
“现在我们循环直到找到匹配项,否则不可能找到匹配项。”
i=1
j=0
尽管如此:
t1=(num1[0]*(i**2)+num1[1]*i+num1[2])
t2=(num2[0]*(i**2)+num2[1]*i+num2[2])
''我们需要某种方法来检查t1>t2是否在某个点改变为t1那么我们知道不可能有匹配''
如果(i==1):
如果t1>t2:
j=0
其他:j=1
如果(t1==t2):
打印(“基数%d”%i中的数字相等)
打破
如果(t2>t1且j==0):
打印(“在%d个步骤“%i”之后,不可能有基本内容)
打破
如果(t1>t2,j==1):
打印(“在%d个步骤“%i”之后,不可能有基本内容)
打破
i=i+1
如果(i>2**6):
打印(“您的搜索可能没有希望”)
打破
对不起,如果你的眼睛被那可怕的密码弄痛了。我甚至没有使用numpy数组。我想知道的是
n1
和n2
中输入的位数上灵活一些。是否有更聪明的方法来定义函数t1
和t2
,以便根据输入的位数自适应地在基i
中展开非常感谢你的阅读。这不是家庭作业,答案可能完全没用。我只是想看看真正的程序员对它的看法。如果这不是一个已经解决的问题,那就太好了。非常喜欢。你可以通过运用一些理论来简化这个问题。以你的第一个例子13x7=28为例,我们可以把它展开成一个基上的显式多项式:(1n+3)*7=2n+8
如果此解有实根,则根是方程为真的n(基)的值。如果你喜欢这类问题,那么你应该阅读Shoup的计算数论。这是一本有趣的书。你的例子在以8为基数时是不相等的,它是以两个不同的基数表示的两个不同的数字(除了8不是以8为基数的数字)。你总是可以这样做,但这并不意味着你在问什么。要将一个以10为基数的数字转换成另一个基数的数字,你可以使用
int(str(number),base)
。我真的不明白,你问的是两个不同基数的数字在同一个基数上有相同的表示形式吗?我想我不清楚,或者只是很愚蠢。我的意思是做两个不同的整数,如果我们给它们加上0,根据我在t1和t2中的展开类型相等。我显然使用了错误的术语@蜥蜴比尔,我试图改变上面的措辞,因为我显然把命名法弄错了。@Amoss下面的回答,没有提供任何代码,实际上回答了我的问题。对于4位整数,可以找到精确解,尽管它们可能是复数。我一直在寻找“基”的整数值解,但我很乐意让这一点悬而未决。在四位数以上的情况下,我们仍然将问题转化为多项式方程,可以通过数值寻根技术来解决。伟大的谢谢各位。非常酷的阿莫斯,谢谢你们的建议。我会想象,如果我们超过四阶整数,那么通过类比四阶多项式,这不是一般意义上的平凡吗?我得去看看这本书。它可能会变得更容易——高次多项式会使搜索空间更稀疏,但简单的答案是它们不能满足。已经有一段时间了,很幸运我认识到了你的问题。很有趣,而且违反直觉。应用数学的家伙,我不懂数论。我的第一个想法是肯定有一些数字理论可以解释这个lol。例如,在回归中,由于搜索中的拓扑复杂性,更高的维度使事情变得非常困难。我不会要求你详细说明如何在更高的维度中更容易,我可能会查阅你推荐的书