Find the largest palindrome made from the product of two 3-digit numbers.
尽管该算法对于当前的问题已经足够快了,但我想知道是否遗漏了任何明显的优化。在
from __future__ import division
from math import sqrt
def createPalindrome(m):
m = str(m) + str(m)[::-1]
return int(m)
def problem4():
for x in xrange(999,99,-1):
a = createPalindrome(x)
for i in xrange(999,int(sqrt(a)),-1):
j = a/i
if (j < 1000) and (j % 1 == 0):
c = int(i * j)
return c
我写这篇文章是在我刚开始学习python的时候写的,但现在是:
我没有核对你所有的数字,但我还是得到了正确的答案。我在这个练习中真正学到的是“:”以及它是如何工作的。{a1}你可以看看。在
祝欧拉好运!在
找here找主意
在C++中,我这样做:createPalindrome
的子调用会由于堆/堆栈垃圾而减慢速度m = str(m) + str(m)[::-1]
很慢[edit1]实现公式
^{pr2}$[edit2]进一步优化
^{3}$在我的代码中,似乎最大的减速是将一个整数转换成一个字符串,再加上它的逆数,然后将结果转换回整数。在
我查阅了更多关于回文的信息,偶然发现了这个公式,这个公式允许我将3位数的数字“n”转换成6位数的回文“p”(可以适用于其他数字,但我不关心这个问题)。在
p=1100*n−990*⌊n/10⌋−99*⌊n/100⌋
我的原始代码大约在0.75毫秒内运行,而新代码所用的时间几乎相同(更不用说公式必须根据“n”的位数进行调整),所以我想剩下的优化不多了。在
相关问题 更多 >
编程相关推荐