2013-02-27 3 views
3

데이터베이스와 요리 책을 검색했지만 올바른 대답을 찾지 못하는 것 같습니다. 나는 범위 내에서 자력을 요약하는 매우 간단한 파이썬 코드를 가지고있다. 나는이 아주 큰 숫자의 마지막 10 자리를 필요로하고 getcontext()를 시도했다. 그러나 여전히 나는 한계를 때리고있다. 여기 매우 큰 숫자의 파이썬

코드입니다 :

def SelfPowers(n): 
     total = 0 
     for i in range(1,n): 
      total += (i**i) 
     return(total) 

print SelfPowers(n) 

어떻게 모든 아름다운 수를 볼 수 있습니까? 내 쿼드 코어에서 상대적으로 빠른 속도로 인쇄됩니다. 이것은 ProjectEuler, 문제 # 48, 장난 꾸러기를위한 재미를위한 것일뿐입니다. 해결책을 원하지 않습니다. 그리고 저를 위해 일을 끝내기를 원하지 않습니다. 제게 올바른 방향으로 나를 가르쳐 줄 수 있다면 요?

감사합니다, MP

+2

힌트 : 마지막 10 자리 숫자 만 계산할 필요는 없습니다. (m = 10^10에 적용) –

+0

숫자 이론의 동등성 mod (a * b, m) = mod (mod (a, m) * mod (b, m), m) @ypercube : 파이썬은'pow (a, b, n)'('(a ** b) % n'과 동일하지만 더 빠름)을 제공함으로써 실제를 쉽게 만듭니다. – nneonneo

답변

8

당신은 (너무 많은 메모리와 시간이 걸릴 것입니다) 전체를 계산하지 마십시오 지난 10 자리 숫자를 숫자의을합니다.

대신에 특정 세력을 계산할 때 "세 인수"형식 인 pow을 사용하면 문제를 훨씬 쉽게 발견 할 수 있습니다. 그것은 일부 초 걸렸습니다하지만

+0

좋아, 모두들 고마워, mod와 함께 해결책을 가졌어 :) – Melody

2

이 테스트는 파이썬 3.2에 나는

print(SelfPowers(10000)) 

할 수 있었다. 얼마나 큰 숫자입니까?

편집 :1000을 사용하고 싶습니까? 이 경우에는 Python 3으로 업그레이드하면된다.