문제

나에 필요한 알고리즘을 보다 더 빠른 현재의 정상적인 파이썬 긴 수 있습니다.

해 괜찮은 Karatsuba 구현,하지만 나는 할 수 없습니다.

def main():
    a=long(raw_input())
    if(a<0):
        a=a*-1
        a=((a*(a+1)/2)-1)
        print(-a)
    else:
        a=(a*(a+1))/2
        print(a)
main()

당신이 볼로,그것은 아무것도 복잡하다,그냥 몇 곱셈.하지만 그것은 번호를 처리하기까지 함께 100000 자리에서 2.5sec.

나는 몇 가지의 조각 기능 또는 일부에 대한 링크의 구현 빠른 곱하기 기능,또는 아무 것도 도움이 됩니다.

도움이 되었습니까?

해결책

당신은 탈퇴 모듈 (Pure Python 버전은 사용할 수 있습니다 (Toom-Cook). gmpy).

다른 팁

나는 저자의 DecInt(Decimal Integer)라이브러리 그래서 난 몇 가지.

이 DecInt 라이브러리 작동하도록 특별히 설계된 매우 큰 정수가 필요하다는으로 변환합니다.문제로 변환하수 형식은 가장 큰 임의의 정밀 라이브러리 값을 저장에 이상이 필요합니다.이것은 가장 빠르고 가장 효율적인 활용을 위한 메모리에서 변환하는 바이너리를 소수점은 일반적으로 느립니다.Python 의 진수로 변환을 사용하는 O(n^2)알고리즘과가 느린지 매우 빠르게 합니다.

DecInt 사용하여 큰 소수수(일반적으로 10^250)저장한 매우 많은 수의 블록 250 숫자가 있습니다.변환하는 매우 큰 숫자를 소수점 이제 형식에서 실행됩 O(n).

순진 또는 초등학교,곱셈에는 실행 시간의 O(n^2).Python 사용 Karatsuba multiplication 는 실행 시간의 O(n^1.585).DecInt 의 조합을 사용하 Karatsuba,툼-요리사,및 Nussbaumer 회선을 얻을 수행 시간의 O(n*ln(n)).

도 DecInt 가 훨씬 더 높은 오버헤드 조합의 O(n*ln(n))곱셈 O(n)변환이 결국보다 빠른 것 Python O(n^1.585)곱셈 O(n^2)로 변환합니다.

대부분의 연산이 필요하지 않는 모든 결과에 표시할수 형식으로 거의 모든 임의의 정밀 라이브러리에서 사용하는 이진 이후 만드는 계산이 더 쉽습니다.DecInt 을 대상으로 아주 작은 틈새 시장입니다.에 대한 충분히 큰 숫자,DecInt 것에 대한 빠른 곱셈와 나누어 있습니다.하지만 경우에 당신은 후 순수한 성능,도서관 같은 GMPY 가장 빠른 것입니다.

나는 당신을 발견 DecInt 도움이 됩니다.

느린 노트북에서 15.9ms. 당신을 늦추는 것은 인쇄물입니다. 이진수로 변환하는 것은 소수점으로 변환하는 것은 상당히 느립니다. 이는 인쇄하는 데 필요한 단계입니다. 숫자를 출력 해야하는 경우 이미 언급 된 혐오스러운 분노를 시도해야합니다.

곱하기가 느리게 곱하면 인쇄물을 훨씬 빨리 만듭니다.

In [34]: a=2**333000

In [35]: len(str(a))
Out[35]: 100243

In [36]: b=2**333001

In [37]: len(str(b))
Out[37]: 100244

In [38]: timeit c=a*b
10 loops, best of 3: 15.9 ms per loop

다음은 약간 수정 된 버전의 코드가있는 예입니다. 이 컴퓨터에서 이미 10 만 자리 문자열을 길로 변환하는 것은 이미 ~ 1sec가 필요합니다.

In [1]: def f(a):
   ...:     if(a<0):
   ...:         a=a*-1
   ...:         a=((a*(a+1)/2)-1)
   ...:     else:
   ...:         a=(a*(a+1))/2
   ...:     return a
   ...: 

In [2]: a=3**200000

In [3]: len(str(a))
Out[3]: 95425

In [4]: timeit f(a)
10 loops, best of 3: 417 ms per loop

나는 당신이 얻는 것이 좋습니다 세이지 수학 도구, 거의 모든 파이썬 수학 도구가 하나의 패키지로 롤링되었습니다. 세이지에 귀하의 요구를 충족시키는 멋진 빠른 임의의 정밀 수학 도구가 있는지 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top