나는 0.5 초 만에 70000과 같은 큰 숫자의 계승을 계산할 수있는 초고속 코드를 찾으려고 노력했다. 내 코드는 10 초 만에 할 수 있었다. 어디서나 검색했는데, 모든 코드는 메모리 오류 문제가 있거나 원하는만큼 빠르지 않습니다. 아무도 이것으로 나를 도울 수 있습니까?파이썬으로 0.5 초에 많은 수의 계승 계산
enter code here
import math
num =int(raw_input())
usefrm=0
if len(str(num)) > 2:
if int(str(num)[-2]) % 2 == 0:
usefrm = 'even'
else:
usefrm = 'odd'
else:
if num % 2 == 0:
usefrm = 'even1'
else:
usefrm = 'odd1'
def picknumber(num):
s = str(math.factorial(num))
l = []
for n in s:
if int(n) != 0:
l.append(int(n))
return l[-1]
def picknumber1(num):
s = str(num)
l = []
for n in s:
if int(n) != 0:
l.append(int(n))
return l[-1]
if usefrm == 'even':
e=picknumber1(6*picknumber(int(num/5))*picknumber(int(str(num)[-1])))
if usefrm == 'odd':
e=picknumber1(4*picknumber(int(num/5))*picknumber(int(str(num)[-1])))
else:
e=picknumber1(math.factorial(num))
print e
70000! 절대적으로 거대합니다. 어떤 종류의 큰 번호 라이브러리를 사용하고 있습니까? – Bathsheba
http://stackoverflow.com/questions/1751334/fast-algorithms-for-computing-the-factorial (파이썬 플래그가있는 것)의 가능한 복제본 – Mijago
gmpy 라이브러리를 사용하여 70000을 계산할 수 있습니다! 이 오래된 2GHz 머신에서 약 0.5 초. –