gpt4 book ai didi

java - 使用筛子查找小于 LONG 数的素数

转载 作者:行者123 更新时间:2023-12-02 03:25:55 26 4
gpt4 key购买 nike

我必须找到小于或等于给定数字n的素数数量。我正在使用埃拉托斯特尼筛法来寻找素数。

这是我编写的代码:

static int find_prime(int n) {
boolean[] arr = new boolean[n+1];
Arrays.fill(arr, true);

for(int i=2;i<=n;i++) {
if(arr[i]==true) {
for(int j=2*i; j<=n; j+=i)
arr[j] = false;
}
}
int count=0;
for(int i=2;i<=n;i++) {
//System.out.print(arr[i]+" ");
if (arr[i] == true)
count++;
}
return count;
}

此代码适用于整数值,但我必须针对数字实现它。 Java 不允许创建 long 大小的数组,因此 boolean[] arr = new boolean[n+1];
不起作用。有人可以建议我解决这个问题的方法吗?

最佳答案

您没有足够的内存来表示整个筛子,因为它以艾字节为单位。偶BitSet不会适合您需要的所有索引,因为最终它 uses用于存储位的 long 数组。

您可以通过混合方法找到答案:

  • 构建并运行高达 Integer.MAX_VALUE 的筛子
  • Integer.MAX_VALUE 以内的素数收集到 long 数组中
  • 请注意,当达到候选数 c 的平方根时,您可以停止检查除数
  • 这意味着您已经拥有高于 Integer.MAX_VALUE 的值的所有潜在除数
  • 使用除数数组过滤 Integer.MAX_VALUEn 之间的数字

由于您不需要在 Integer.MAX_VALUE 之后存储额外的素数,因此您的代码不会耗尽内存。

关于java - 使用筛子查找小于 LONG 数的素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38899199/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com