免责声明:这个问题纯粹是为了好玩。可能已经有一个解决方案(我搜索,没有运气)。我在下面有几个问题,我会很感激他们中的任何一个的答案。 RIYL ...两个整数是否等于一些基数?
我受到前面看到的Three Stooges视频的启发,它显示13x7 = 28。您可能已经看到了它。但是我开始怀疑:是否有一些“基础”,其中这个等式是真实的(我把基础放在引号中,因为我用错误的意义来看这个术语..见我的意思是最后一段)?
答案显然不是,如果我们定义乘法与整数相同。如果你将13分解为“基数”i,比如13 = 1*i+3
和28 = 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数组。我想知道的是,
这个问题之前解决了,对于任意数字?如果没有...
我想灵活地输入在
n1
和n2
中输入的位数。是否有更巧妙的方法来定义函数t1
和t2
,以便根据输入的位数自适应地扩展基地i
?性能明智我相信有一个更好的方式来做我的主要迭代。这对我来说是有趣的部分,加上对第2部分的回答。有什么建议吗?
如果发生t1和t2永远保持相同的顺序,如代码示例中那样,迭代将执行2 ^^ 6次。迭代次数是任意选择的,但可以想象,如果我们扩展到许多数字,则可能需要更多的迭代!当然,有更聪明的方法来停止迭代?
我的停止条件错了吗?
非常感谢您的阅读。这不是一项家庭作业,答案可能完全无用。我只是对看到一个真正的编码者的感兴趣。如果这不是一个已经解决的问题,这将是整洁。非常喜欢。
你的例子在基数8中不相等,它是两个不同的基数表示的两个不同的数字(除了8不是基数8的数字)。你总是可以做到这一点,但这并不意味着你在问什么。 –
要将基数10中的数字转换为其他基数中的数字,可以使用'int(str(number),base)'。 – zondo
我真的不明白,你是否问过在不同基地有两个数字在一些共同的基地有相同的代表性? –