如何在python中找到非常大的数字a^b?

如何在python中找到非常大的数字a^b?,python,Python,我试图找出python中的a^b,真正的大数字 我的代码是: t=raw_input() c=[] for j in range(0,int(t)): n=raw_input() a=[] a,b= (int(i) for i in n.split(' ')) c.extend(pow(a,b)) for j in c: print j 我得到了这样一个错误: raceback (most recent call last): File "C:/Py

我试图找出python中的
a^b
,真正的大数字

我的代码是:

t=raw_input()
c=[]
for j in range(0,int(t)):
    n=raw_input()
    a=[]
    a,b= (int(i) for i in n.split(' '))
    c.extend(pow(a,b))
for j in c:
    print j
我得到了这样一个错误:

raceback (most recent call last):
  File "C:/Python26/lastdig.py", line 7, in <module>
    c.extend(pow(a,b))
TypeError: 'int' object is not iterable
raceback(最近一次通话最后一次):
文件“C:/Python26/lastdig.py”,第7行,在
c、 延长(pow(a、b))
TypeError:“int”对象不可编辑
我的问题出了什么问题?这是求大数幂的有效方法吗?

你应该试试。尝试以下方法:

import gmpy
a = gmpy.mpz(10**10)
b = a**10000000

我不知道你的数字有多大,这个解决方案没有那么快(但结果足够大:p)

另一种计算指数的方法是使用对数定律

x^y=e^(y-lnx)


我不能肯定,但这可能会减少计算大指数所需的运算量。

python整数运算是任意精度的 如果需要任意精度浮点运算,请导入十进制

from decimal import *
d=Decimal('2.0')
print d**1234

10000**10000次打印在我的机器上,不到一秒钟

你的投入有多大

你的问题与幂函数无关

使用

而不是

c.extend()

c、 extend将一个iterable(列表/元组/集合/自定义iterables)作为输入。

您使用extend是错误的。A.extend(B)要求B是某个可编辑对象(即列表、元组)。您确实希望使用append

t=raw_input()
c=[]
for j in range(0,int(t)):
    n=raw_input()
    a,b= (int(i) for i in n.split(' '))
    c.append( pow(a,b) ) ## or you could extend c.extend( [ pow(a,b) ] ), but thats silly.
for j in c:
    print j

x**y
对指数非常有效。如果您想要更原始的解决方案,可以使用:

def exp(base, exponent):
  round(exponent, 0)
  if exponent < 0:
    return 1.0 / exp(base, -1 * exponent)
  if exponent == 0:
    return 1
  if exponent > 0:
    return base * exp(base, exponent - 1)`
def exp(基数,指数):
四舍五入(指数,0)
如果指数<0:
返回1.0/exp(基数,-1*指数)
如果指数=0:
返回1
如果指数>0:
返回基数*exp(基数,指数-1)`

遗憾的是,这只适用于整数指数。

?您的第7行没有extend,您有append,这不会导致这样的错误。请提供您给程序的输入。另外,你确定你提供的源代码和错误匹配吗?你的问题和你的错误是两个完全不同的野兽。这段代码在我的机器上工作(Python 3,将原始输入更改为输入)。另一方面,为什么不使用a**b而不是pow(a,b)?我很想知道这是否有助于提高性能;这完全取决于python对pow()的实现。我正在等待一些专家对此的评论。pow()是通过重复平方来完成的,因此它非常有效。对于中等大小的数字,对数大约相同或稍快,但pow()通常优于pow(),因为它计算的是精确答案,而不是浮点近似值,并且不会在大数字上溢出。嘿,我尝试了exp(21000)和viola max递归深度!
def exp(base, exponent):
  round(exponent, 0)
  if exponent < 0:
    return 1.0 / exp(base, -1 * exponent)
  if exponent == 0:
    return 1
  if exponent > 0:
    return base * exp(base, exponent - 1)`