【发布时间】:2017-02-02 04:16:49
【问题描述】:
Binary palindromes: numbers whose binary expansion is palindromic.
二进制回文 -> 是一个二进制表示为回文的数字。
Here is link to the solution with naive approach
我已经阅读了上面的链接,它给出了一个找到第 n 个二进制回文的公式。我无法理解并因此编写解决方案。
def palgenbase2(): # generator of palindromes in base 2
#yield 0
x, n, n2 = 1, 1, 2
m = 1;
while True:
for y in range(n, n2):
s = format(y, 'b')
yield int(s+s[-2::-1], 2)
for y in range(n, n2):
s = format(y, 'b')
yield int(s+s[::-1], 2)
x += 1
n *= 2
n2 *= 2
if n2 > 1000000000:
break
ans = {}
for i,j in enumerate(palgenbase2()):
print i,j
ans[i]=j
with open("output","a") as f:
f.write(ans)
#use the saved output to give answer to query later
#this will work but it takes too much time.
n = int(raw_input())
for c in range(0,n):
z = int(raw_input())
print ans[z]
这是一个 Python 代码,但它会生成所有此类回文。
我需要程序帮助才能直接获取第 n 个二进制回文。
如下:
输入 -> 1 函数 -> f(n)
输出 -> 第 n 个二进制回文。
我们可以使用here 提到的公式更及时地做到这一点吗?
【问题讨论】:
-
请附上您尝试的解决方案,以及为什么它们不起作用。有关详细信息,请参阅 Stack Overflow 问题清单。
-
投反对票的原因如下:您的问题没有显示任何尝试自己解决问题和/或理解代码的痕迹。您只是提供了一些复制/粘贴的代码,并希望有人为您完成其余的工作。如果您能在提供的代码中准确指出您不理解的内容,我将很乐意提供帮助。
-
抱歉,我没有尝试分析该公式的工作原理。但我只是测试了它,它产生的结果与生成器相同。而且您还没有解释是什么阻止您在 Python 中实现该递归公式。但我想如果我发布我的实现,你可能会得到一些想法。 :)
-
@dsgdfg:当然,这可以让您测试
number是否是二进制回文。但是 lordzuko 想要一个函数,例如bin_palindrome(n),它返回第 n 个二进制回文而不对所有以前的二进制回文进行暴力搜索。 -
当然,OEIS _可能有点神秘。例如,我不了解 Maple,因此 Maple 代码对我来说毫无用处。 :) 但是,伪代码还不错,恕我直言。您只需要从
Recursion for n>2: a(n)=2^(2k-q)+1+2^p*a(m)开始的部分。但无论如何,希望我的回答能让它更清楚一点。
标签: python algorithm binary palindrome