有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数组如何在java中获得表大小2^32

我必须进入java protected final static int [] SIEVE = new int [ 1 << 32 ]; 但我不能强迫java这么做

我得到的是2^26我需要2^32来结束我的家庭作业。我试过使用mask,但我需要使用SIEVE[n]=k,其中min{k:k | n&;k>;2}

编辑 我需要用Sieve找到从2到2^63-1的因子数,Sieve必须有P[n]=是除以n的最小素数的信息。我知道用Sieve我可以将数分解为2^52。但是如何在坚持内容的情况下进行练习呢

编辑x2问题已解决


共 (2) 个答案

  1. # 1 楼答案

    不能。Java数组最多可以有2^31 - 1元素,因为数组的size必须适合有符号32位整数

    这适用于在32位或64位JVM上运行的情况


    我怀疑你的家庭作业遗漏了什么。要求能够找到所有小于2^32的素数还是什么?如果是这样,他们希望您将int[]中的每个int视为32位的数组。您只需要一个2^25个int的数组就可以做到这一点。。。如果我的算术正确的话

    ABitSet是另一个好的选择

    ALinkedList<Integer>是一个糟糕的选择。它使用的内存大约是相同大小的数组的8倍,而且get(int)的性能在一个长列表中会非常慢。。。假设您以明显的方式使用它

    如果您希望能够高效地使用尽可能多的内存,就应该使用int[][],即整数数组数组,其中int[]实例尽可能大


    I need to find Factor numbers from 2 to 2^63-1 using Sieve and sieve must have information that P[n]= is smallest prime with divide n. I know that with sieve i can Factorise number to 2^52. But how do that exercises with holding on to the content.

    我不确定我是否理解你。要对2^64区域内的数字进行因式分解,最多只需要2^32的素数。。。不是2^52。(2^64的平方根是2^32,非素数的素数因子必须小于或等于其平方根。)

    听起来你好像在试图筛选出比你需要的更多的数字

  2. # 2 楼答案

    如果您确实需要在内存中存储那么多数据,请尝试使用java。util。而不是LinkedList

    然而,如果需要在16GB的内存中存储基本的数据缺陷。 如果你说的是Eratosthenes筛,你需要存储所有的素数<;2^32在数组中,仍然不需要大小为2^32的数组。我建议您使用java.util.BitSet查找素数,并根据需要迭代和打印它们或将它们存储在LinkedList中