免责声明:这个问题纯粹是为了好玩。可能已经有了解决方案(我搜索过,没有运气)。我有几个问题,我很感激他们中的任何一个答案。 RIYL ...
我的灵感来自于我之前看到的三个Stooges视频,其中显示13x7 = 28.你可能已经看过了。但我开始疑惑:是否有一些“基础”,其中这个等式是正确的(我把基数放在引文中,因为我在错误的意义上使用了这个术语。看看我的意思的最后一段)?
如果我们定义乘法与整数相同,答案显然是否定的。如果你将13分为“基数”i,比如说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,那么根据我的(显然错了)使用基数,我们有平等。我写了一些简单的代码,最多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次。迭代次数是任意选择的,但可以想象如果我们扩展到多个数字,可能需要更多的迭代!当然有一种更聪明的方法来阻止迭代?
我的停止条件是错的吗?
非常感谢阅读。这不是家庭作业,答案可能完全没用。我只是想看到真正的程序员对它的看法。如果这不是一个已经解决的问题,那将是很好的。非常爱。
答案 0 :(得分:3)
通过应用一些理论,你可以使问题更简单。以你的第一个例子13x7 = 28为例,我们可以将它扩展为基数上的显式多项式:(1n + 3)* 7 = 2n + 8.
如果此解具有真正的根,则根是n(基数)的值,其等式为真。如果您喜欢这类问题,那么您应该阅读Shoup的计算数论。这是一本有趣的书。