Python中, 可以使用n * m表示乘法, n ** m表示乘方。
然后风子想到了n *** m、n **** m、n ***** m可以表示什么, 于是我定义n k* m表示n k个* m运算, 比如 2 3* 4表示2***4。
规定n,k,m属于正整数, 因为我的脑子很不好使, 很怕产生各种乱七八糟的情况。风子说: “说不定数学原来是连续的, 然后被人类给离散化了。”
然后规定 n k* m = n (k-1)* n (k-1)* n … (k-1)* n (m个n), 计算顺序从右到左。
至于为什么是从右到左, 因为Python运行2**3**4的结果(很大)告诉是从右到左, awk ‘{print 2^3^4; }’, $((2**3**4))(溢出为0, 所以是右到左), ruby p 2**3**4都是右到左, 但是VBScript运行msgbox 2^3^4是从左到右(结果4096), 然后数学老师教我们乘法也是从左到右计算的。
根据这个规定, 我们得到了一个重要的结论1 k* 1=1, 2 k* 2=2 (k-1)* 2=2*2=4, 这个结论方便我们化简如下算式
2****3
=2***2***2
=2***4
=2**2**2**2
=2**2**4
=2**16
=65536
可以撰写如下代码来计算
# -*- coding: utf-8 -*- # 定义如下运算 n k* m = n (k-1)* n (k-1)* n ... (k-1)* n (m个n,计算顺序从右到左) def main(): n, m, k = raw_input().split(' ') ans = calc(int(n), int(m), int(k)) print(ans) raw_input() #计算 n k* m def calc(n, m, k): if k == 1: return n * m c = m - 1 ans = n while c>0: ans = calc(n, ans, k - 1) c -= 1 return ans if __name__ == '__main__': main()
输入n,m,k来使用。
这不是别的, 正是超级幂。
忽然想到逆运算。
若n k* m=x,
就用n k/ x表示m吧, 为什么是”/”, 我高兴。
然后n k* (n k/ x)=x。
把它叫做”超级对数”吧~
发表评论