我正在解決使用java幾個月的樂趣的歐拉現在的問題。許多時候堆的大小限制了我,所以我想知道別人在達到這個死亡和瘋狂的結局時做了什麼。堆大小的邊界
一個很好的例子是問題「http://projecteuler.net/problem=432」,其中我有一個簡潔的函數,可以在幾毫秒內解決10^6,但我不能將它應用到所需的值(10^11),因爲它需要一個整數數組大小爲10^11。
編輯:澄清問題。有沒有辦法篩選大數字?例如,如果你要找到大於10^10的第一個素數,你會怎樣?
我正在解決使用java幾個月的樂趣的歐拉現在的問題。許多時候堆的大小限制了我,所以我想知道別人在達到這個死亡和瘋狂的結局時做了什麼。堆大小的邊界
一個很好的例子是問題「http://projecteuler.net/problem=432」,其中我有一個簡潔的函數,可以在幾毫秒內解決10^6,但我不能將它應用到所需的值(10^11),因爲它需要一個整數數組大小爲10^11。
編輯:澄清問題。有沒有辦法篩選大數字?例如,如果你要找到大於10^10的第一個素數,你會怎樣?
如果您的解決方案需要10 ** 11整數的數組,那麼您需要購買一臺至少具有745GB內存的計算機。默認堆大小不是那麼大似乎是合理的。或者你需要重新考慮它,而不是使用這麼龐大的數組。
對於真正的大素數,您無法從eratosthenes篩選中獲得篩選數組的最大長度受Integer.MAX_VALUE限制。
可以通過最直接的方法計算它們 -
撇號(N)=如果在每一個素數[0,SQRT(N)]是不N.
的一個主要因素和存儲所有在一個文件或幾個文件中計算的大素數。做一次,然後重複使用它們。當你正在做一個需要大素數的歐拉問題時,首先將這些素數從文件加載到內存。
是的,我從來沒有打算暗示過,我期望這個數組能夠變得這麼大,也許如果有其他的數據破壞你知道的或者這樣的話。當你達到這樣的死衚衕時,通常你的方法是什麼? – user2435678
@ user2435678:我重新考慮了算法。你是否多次需要這些值?如果不是,則不需要存儲。 –