当前位置: 首页 > 知识库问答 >
问题:

使用sieve查找小于长整数的质数

逄嘉禧
2023-03-14

我必须找到小于或等于给定数字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;
}

这段代码适用于< code>integer值,但是我必须为< code>long数实现它。而Java不允许创建< code>long大小的数组,所以< code > boolean[]arr = new boolean[n 1];不起作用。有人能建议我解决这个问题的方法吗?

共有1个答案

邴星洲
2023-03-14

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

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

    < li >构建并运行一个高达< code >整数的筛子。MAX_VALUE < li >采集高达< code >整数的质数。MAX_VALUE转换为< code>longs数组 < li >注意,当达到候选数字< code>c的平方根时,您可以停止检查除数 < li >这意味着您已经有了大于< code>Integer值的所有可能的除数。MAX_VALUE < li >使用除数数组筛选< code >整数之间的数字。最大值和< code>n

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

 类似资料:
  • 本文向大家介绍查找三个小于或等于N的整数,以使它们的LCM最大-C ++,包括了查找三个小于或等于N的整数,以使它们的LCM最大-C ++的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将编写一个基于LCM概念的程序。如标题所示,我们必须找到三个小于或等于LCM最大的给定数字的数字。 让我们来看一个例子。 在深入探讨问题之前,让我们看看什么是LCM并为其编写程序。 LCM是数字的最小公倍

  • 我想找出一个整数部分的一个平方根的数字在python与pylab扩展然而,long(sqrt(n))不适用于大整数。有没有什么方法可以非常快地找到一个非常大的数的平方根的整数部分?我是新的Python和编程。我所知道的是当循环和如果语句。谢谢你们

  • 问题内容: 我们需要在分配中递归地找到一个数组中的第二个最小整数。但是,为了更好地理解该主题,我想先通过本网站进行迭代,然后自己进行递归。 不幸的是,迭代地进行相当混乱。我知道该解决方案很简单,但我无法解决。 到目前为止,以下是我的代码: 这适用于一些数字,但不是全部。数字会变化,因为内部if条件的效率不如外部if条件的效率。 禁止阵列重排。 问题答案: 试试这个。当最小的数字是第一个时,第二个条

  • 我需要编写一个递归方法,将int作为输入,并以int(而不是字符串)的形式返回其中最长的相同数字序列。计数序列并不是最难的部分,但当给定一个包含几个序列的数字时,我不知道如何返回正确的值,而不计算所有的序列,而只计算最长的序列。目前,我编写了一段只计算序列长度的代码: 我真的很难完成剩下的事情。

  • 例如:2520是被1到10的每个数字除以的最小正数。 请帮助我使用SQL逻辑查找1到20之间的最小正数

  • 编写一个方法,该方法采用一个整数数组,并返回其最长的具有不同整数的子数组的长度。 例如,对于 [1,2,3,4,,它应该返回 。