有效解决Python中的字母/数字问题

时间:2011-01-28 15:31:12

标签: python math

如果a = 15152表示为a2215表示为2a,则必须找到数字x,以便

8x = 8*x8

我尝试了这个天真的Python代码

>>> i = 0
>>> while(i<=100000000000000000):
...   if(int("8"+str(i))==8*int(str(i)+"8")):
...     break
...   i = i+1
... print i

但是要花费大量时间才能产生正确的结果。

如何优化代码?

2 个答案:

答案 0 :(得分:10)

这里的一些数学帮助:让 x 成为 n 位的自然数。然后8x = 8 * 10 ^ n + x,并且x8 = 10 * x + 8.因此要求解的等式是8 * 10 ^ n + x = 8 *(10 * x + 8)= 80 * x + 64 ,其中 x n 必须是自然数。紧接着x =(8 * 10 ^ n - 64)/ 79.现在我们只需要检查8 * 10 ^ n - 64形​​式的哪个数字可被79整除,这非常快:

>>> n = 0
>>> while True:
...     y = 8 * 10**n - 64
...     if y % 79 == 0:
...         x = y / 79
...         break
...     n += 1
... 
>>> print x
101265822784
>>> print int("8"+str(x))==8*int(str(x)+"8")
True

答案 1 :(得分:1)

您应该尝试摆脱str到int转换。

首先,8*int(str(i)+"8")可以写成8*(i*10+8),第一部分可以更改为8*( int(log(i)/log(10))+1) + i