标签:
据说,李嘉诚的保险柜密码是一个 8 位的数字。他经常更换密码,但换密码的规则很简单,每次都把密码的数字 * 3,如果有位数溢出,就把最前面的那个数字挪到整个数字末尾加起来 —— 比如 98765432 就会变成 98765432 * 3 = 296296296, 但是这有 9 位, 把最前面的 2 加到末尾, 变成 96296298, 就是新密码。现在我们偷到了李嘉诚的保险柜,而且我们知道他最初的密码是 00000001, 已经迭代了 n 次,求一个算法,可以在 O(log n) 的时间内算出密码。
1 def g(x): 2 return x % 1000000000 + x // 1000000000 3 4 def f(x): 5 if x == 1: 6 return 3 7 elif x % 2 == 0: 8 return g(f(x / 2) * f(x / 2)) 9 elif x % 2 == 1: 10 return g(f(1) * f(x - 1)) 11 12 if __name__ == ‘__main__‘: 13 print(f(47))
哈哈,:)
迭代分析:
标签:
原文地址:http://www.cnblogs.com/gotodsp/p/5723743.html