从数组中删除所有复合数字

时间:2014-01-22 16:16:08

标签: arrays math numbers theory primes

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

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

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

1 个答案:

答案 0 :(得分:2)

请注意,您的递归关系的闭合表单式为:

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

因此,当i为偶数时,您在此数组中寻找的素数类near-square primesresources exist用于保留一些其他信息。如果这是它的程度,那可能就足够了。

但是,那不是它。当i是奇数时,它会有点困难。我无法找到针对此案例的解决方案,并且我不得不总结您找到一般解决方案的最佳方法是足够大的Sieve of Erasthenes作为检查所有a[i]的素数的基础{{} 1}}。由于i =(1e8)+1,正确实施的筛网将需要大约1.25e7字节(大约13MB)的内存。虽然很大,但在大多数现代计算机上仍然可以管理。当然,如果这是一个嵌入式系统......