【问题标题】:How do I efficiently generate Prime Numbers up until 3037000499 (the square root of Long.MAX)? [closed]如何有效地生成质数直到 3037000499(Long.MAX 的平方根)? [关闭]
【发布时间】:2019-05-18 15:17:17
【问题描述】:

我用 Sieve Of Eratosthenes 进行了尝试,但我很快遇到了我的布尔数组无法超过 Integer.MAX 的问题

我应该如何解决这个问题?

【问题讨论】:

  • 您可以尝试使用 BitSet,它应该占用布尔数组内存的八分之一。
  • BitSet 就是答案。您可以自己实现一个,但为什么要麻烦呢?
  • 您只需要筛选奇数,因为 2 是唯一的偶素数。这将使您的 BitSet 的存储需求减半。如果这不起作用,请使用分段筛,以较小的块处理整个范围。

标签: java primes long-integer


【解决方案1】:

数组

使用 2 维或更多维地图。因此将 long 转换为两个整数(用于访问数组)将是这样的:

array[N / Integer.MAX_VALUE][N % Integer.MAX_VALUE] 其中 N 是 longarray 是布尔数组。

【讨论】:

  • 内部 HashMap 由一个数组支持,这意味着它不能包含超过 Integer.MAX 个项目。
  • 你说得对,我会删除它。感谢您指出这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-24
  • 1970-01-01
  • 2013-10-05
  • 1970-01-01
  • 2015-03-04
  • 2021-09-08
  • 1970-01-01
相关资源
最近更新 更多