Sieve of Eratosthenes
を実装して、1からnまでの素数のリストを見つけました。私のコードは、10,000 1からの入力のために正常に動作しているが、私は値> 10万以下取得しています:アルゴリズム:EratosthenesのSieveを使ってすべての素数を列挙してください
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -2146737495
at SieveOfEratosthenes.main(SieveOfEratosthenes.java:53)
私はそれがあるように私はi * i
をやっている時にループのためにある問題を、見つけることができています整数の範囲(Integer.MAX_VALUE
)から出ていますが、解決策を見つけることができませんでした。誰かが私にこの変更を効率化するための改良を提案してくれれば、何ができますか?
int limit = 2 << 14;
for(int i = 1; i < nodes.length; i++) {
if(nodes[i].getMarker() && nodes[i].getValue() > 1 && i <= 2 << 15) {
System.out.println("Prime " + nodes[i].getValue());
if (i > limit) {
continue;
}
} else {
continue;
}
私も 'Math.abs(j)
Vishrant
@ScaryWombat私はすでにこれを試しましたが、 long値を使用します。そのJavaドキュメントの – Vishrant
http://stackoverflow.com/questions/30805300/accessing-an-array-element-if-using-long-datatype-in-javaこれはあなたを助ける – Vishrant