我試圖找到有多少素數,直到最大的兩個產品超過Long.MAX_VALUE。這是我可以找到我可以處理的最大素數的最佳方式嗎?
它採取了半個多小時(和RAM GBS)
public class Main {
public static void main(String[] args) {
ArrayList <Long> primes= new ArrayList<Long>();
primes.add(2L);
long i=3L;
// Looping from 3, to the limit
while (primes.size()<2||(primes.get(primes.size()-1)*primes.get(primes.size()-2)<Long.MAX_VALUE)) {
boolean isPrime = true;
long maxDiv =Math.round(Math.sqrt(i));
int j=0;
while(primes.get(j)<maxDiv && isPrime) {
if (i % primes.get(j) == 0) {
isPrime = false;
}
j++;
}
if (isPrime) {
primes.add(i);
System.out.println(i);
}
i=i+2;
}
System.out.println("max size is: "+primes.size());
}
}
編輯
我也有興趣在我達到這個極限前多少素數得。所以自上而下的方法不會完成這項工作。
無論如何,我意識到,我能在我的應用程序達到這兩個數字,我會成爲富人在此期間:)
我不明白這個問題上的反對票。 –
我同意,因爲您做了誠實的努力並提供了代碼,所以我認爲沒有理由拒絕投票。一個負面投票應該總是通過評論來解釋(我想知道爲什麼這不是由StackOverflow強制)。 重新提出您的問題,我建議您閱讀有關Erathostenes的篩網: https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes –
有人對此問題提交了近距離投票,因爲「問題要求我們推薦或找到一本書,工具,軟件庫,教程或其他非現場資源對於堆棧溢出而言是無關緊要的「。 WTF? – samgak