arrays - 从数组中删除所有合数

标签 arrays math numbers theory primes

我有一个排序数组 a,大小为 2*105 且 1≤A[i]≤1010 包含素数和合数。生成的数字如下所示:

a[1] = 1
for i > 1
    a[i] = a[i-1]+(i/2)

如何有效地从数组中删除合数?一种解决方案是使用 Rabin-Miller 检查每个元素的素性。有没有更有效的解决方案?

最佳答案

请注意,您的递归关系具有以下闭合形式表达式:

a[i] = floor([i/2]^2) + 1

因此,您在此数组中查找的素数类别为 near-square primesresources existi 为偶数时提供一些附加信息。如果仅此而已,那可能就足够了。

但是,事实并非如此。当i是奇数时,就有点困难了。我找不到这种情况的解决方案,并且被迫得出结论,找到通用解决方案的最佳方法是足够大的 Sieve of Erasthenes作为检查所有 ia[i] 素数的基础。由于 a[20000] = (1e8)+1,正确实现的筛子将需要大约 1.25e7 字节(约 13MB)的内存。虽然它很大,但在大多数现代计算机上仍然可以管理。当然,如果这是针对嵌入式系统...

关于arrays - 从数组中删除所有合数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21288216/

相关文章:

java - 将 JTextField 输入限制为整数

C++ 从指定范围内的文件中读取数组

algorithm - 如何从范围中获取百分比

c++ - 在 C 中求解多项式系统(4,二阶)

math - 为什么这会产生拉伸(stretch)的分形?

Javascript 数组的最大值并找到它在哪里?

ruby - 如何计算 Ruby 中两个普通区间的交集?

php - foreach 循环中数组 undefined offset 通知

arrays - Perl 如何访问作为数组元素的散列,该数组是另一个散列的值?

JavaScript;如何在三位数字后设置点?