Форум сайта python.su
0
import numpy n = 1600 m = 1500 def C(n,k): s = 0 B = numpy.array([[0]*(n+1)]*(n+1)) for i in range(n+1): B[i][0]=1; B[i][i]=1; for j in range(1,i): B[i][j]=long(B[i-1][j-1])+long(B[i-1][j]) return B[n][m] % 1000000 print C(n,m)
Отредактировано hter (Дек. 24, 2013 16:26:14)
Офлайн
33
1. Версия Питона? Очень похоже на 2. Если так, используйте 3.
2. Полный трейс ошибки. Ошибка на range или long()?
От этого зависит решение: собственный заменитель для range, numpy.int32, numpy.int64 или даже беззнаковые целочисленные типы.
Офлайн
0
А чем 3 лучше?
Ошибка на long()
File “C:\Python27\1.py”, line 16, in C
B=long(B)+long(B)
OverflowError: Python int too large to convert to C long
Офлайн
568
hterРазумно предположить, что если бы она не была лучше, то её бы не придумывали.
А чем 3 лучше?
Офлайн
33
hterНа 64-битных платформах функция range в 3 питоне использует другой тип - long int длиной 64 бита.
А чем 3 лучше?
Офлайн
253
*** Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32. *** >>> import numpy as np >>> a=np.array([4000000],dtype='i') >>> a[0] 4000000 >>> a[0]*a[0] C:\apps\PyScripter\PyScripter.exe:1: RuntimeWarning: overflow encountered in int_scalars MZP1246822400 >>> 4000000*4000000 16000000000000L >>> 16000000000000L*16000000000000L 256000000000000000000000000L
Офлайн