본문 바로가기

컴퓨터 기술

2의 15억(1504780000)승 계산한게 자랑

며칠 전에 2의 10억승을 구했다는 소식 듣고, 나도 만들이 봤음.

"직접만든 프로그램으로 2의 1000000000 (10억)승 계산한게 자랑"
http://gall.dcinside.com/list.php?id=hit&no=10262&page=1&bbs=


apfloat for java 라이브러리(http://www.apfloat.org/apfloat_java/) 이용해서 만든 건 안 자랑.

대신 금방 짰음.



Apint twoPow = ApintMath.pow(new Apint(2), 10000); 를 10억으로 고치면 결과가 나옴.

100억으로 고치면 int 범위 넘는다고 에러.

Apint twoPow = ApintMath.pow(new Apint(2), new Long("10000000000"));

Long 으로 고치면,

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at org.apfloat.internal.IntMemoryDataStorage.implCopyFrom(IntMemoryDataStorage.java:63)
at org.apfloat.spi.DataStorage.copyFrom(DataStorage.java:611)
at org.apfloat.internal.Int3NTTConvolutionStrategy.autoConvoluteOne(Int3NTTConvolutionStrategy.java:196)
at org.apfloat.internal.Int3NTTConvolutionStrategy.autoConvolute(Int3NTTConvolutionStrategy.java:178)
at org.apfloat.internal.Int3NTTConvolutionStrategy.convolute(Int3NTTConvolutionStrategy.java:117)
at org.apfloat.internal.IntApfloatImpl.multiply(IntApfloatImpl.java:1156)
at org.apfloat.Apfloat.multiply(Apfloat.java:733)
at org.apfloat.Apint.multiply(Apint.java:313)
at org.apfloat.ApintMath.pow(ApintMath.java:66)
at twopow.main(twopow.java:13)

이런 에러가 남.

64bit 자바로 하니 다른 에러가 났음.

Exception in thread "main" org.apfloat.internal.TransformLengthExceededException: Maximum transform length exceeded: 100663296 > 50331648
at org.apfloat.internal.IntFactor3SixStepNTTStrategy.transform(IntFactor3SixStepNTTStrategy.java:132)
at org.apfloat.internal.Int3NTTConvolutionStrategy.autoConvoluteOne(Int3NTTConvolutionStrategy.java:197)
at org.apfloat.internal.Int3NTTConvolutionStrategy.autoConvolute(Int3NTTConvolutionStrategy.java:178)
at org.apfloat.internal.Int3NTTConvolutionStrategy.convolute(Int3NTTConvolutionStrategy.java:117)
at org.apfloat.internal.IntApfloatImpl.multiply(IntApfloatImpl.java:1156)
at org.apfloat.Apfloat.multiply(Apfloat.java:733)
at org.apfloat.Apint.multiply(Apint.java:313)
at org.apfloat.ApintMath.pow(ApintMath.java:66)
at twopow.main(twopow.java:13)

그래서 크기를 줄이니까 2의 15억(1504780000)승 정도까지 가능.

크기는 431메가 나오고, AMD Athlon II X3 440 에서 1분 45초 걸렸음.




 

근데 내가 이걸 왜 하고 있는 걸까? ㅠㅠ

 

태그