都道府県穴埋めゲーム

javaで2の1乘から2の100000000乘までの値のmod n(nは1000ビット)の値をBigInteger型の配列に格納したくて
A.java

BigInteger a = new BigInteger("2");
BigInteger b = new BigInteger("1");
f[0] = b;
for(j=1;j<100000000;j++)
f[j]= (f[j-1].multiply(a)).mod(n) ;  ・・・ここでエラー

のようなプログラムを作成しましたがjava -Xmx1400m A 実行するとjava.lang.OutOfMemoryError: Java heap space というエラーがでます。私のパソコンでは1400mが限界でこれ以上超えるとToo small initial heap というエラーが出ます。なんとかエラーが出ずにプログラムを実行させる方法はないでしょうか?

A 回答 (2件)

1400MBのメモリ内にBigIntegerのオブジェクトを100000000個格納しようとすると、単純計算で1オブジェクトあたり15バイトも使えないことになります。

BigInteger 1オブジェクトに必要なメモリサイズは保持する値によって変わりますが、nは1000ビットの値なので、nで割った剰余が平均15バイト以内で表せるわけがありません。お使いのコンピュータのメモリをちょっとやそっと増やしても100000000要素のBigInteger配列を全てメモリ内に格納することは無理です。

100000000要素を同時にメモリ内に格納しなくていいように、プログラムの構成を変えるしかないでしょう。
計算を終えた部分はファイルに書き出して、その値が後で必要になったときにはファイルからまた読み出すようにするとか。
    • good
    • 0

そもそも何をしたくてこんなことをしてるんですか?


#1 でも指摘されてますけど, もっと端的に言えば「方針が間違っている」としか思えません.
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!