簡體   English   中英

如何在Java中獲取表大小2 ^ 32

[英]How to get table size 2^32 in java

我必須進入java protected final static int [] SIEVE = new int [ 1 << 32 ]; 但是我不能強迫Java這么做。

我得到的最大篩子是2 ^ 26我需要2 ^ 32才能結束作業。 我嘗試使用遮罩,但是我需要SIEVE [n] = k,其中min {k:k | n&k> 2}。

編輯我需要使用Sieve查找2到2 ^ 63-1的因數,並且sieve必須具有P [n] =是除以n的最小素數的信息。 我知道用篩子可以將因子分解為2 ^ 52。 但是,如何堅持內容呢?

編輯x2問題已解決

你不能 一個Java陣列可以具有至多 2^31 - 1元件,因為size的陣列具有適合在一個符號的32位整數。

無論您是在32位還是64位JVM上運行,這都適用。


我懷疑您的作業中缺少一些東西。 是否要求能夠找到所有小於2^32素數? 如果是這種情況,他們希望您將int[]每個int視為32位數組。 如果我的算術是正確的,則只需要一個2^25 int的數組即可。

BitSet是另一個不錯的選擇。

LinkedList<Integer>是一個較差的選擇。 它使用的內存大約是相同大小的數組的8倍,並且對於長列表來說, get(int)的性能將非常慢……假設您以明顯的方式使用它。

如果您想要某種可以有效使用盡可能多的內存(可以配置JVM來使用)的內存,則應使用int[][]即整數數組的數組,並且int[]實例應盡可能大使他們。


我需要使用Sieve查找從2到2 ^ 63-1的因數,並且sieve必須具有P [n] =是除以n的最小素數的信息。 我知道用篩子可以將因子分解為2 ^ 52。 但是,如何堅持內容呢?

我不確定我是否了解您。 要分解2 ^ 64范圍內的數字,您只需要質數最大為2 ^ 32 ...而不是2 ^ 52。 (2 ^ 64的平方根為2 ^ 32,並且非素數必須具有小於或等於其平方根的素數。)

聽起來您正在嘗試篩除所需的更多數字。

如果確實需要在內存中存儲那么多數據,請嘗試使用java.util.LinkedList集合。

但是,如果您需要在內存中存儲16GB數據,則算法中存在一個基本缺陷。 如果您正在談論Eratosthenes的篩網,並且您需要將所有<2 ^ 32的素數存儲在一個數組中,那么您仍然不需要大小為2 ^ 32的數組。 我建議您使用java.util.BitSet查找素數,然后根據需要迭代並打印或將其存儲在LinkedList中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM