我有一个排序数组a
,其大小为2 * 10 5 且1≤A[i]≤10 10 包含素数和复数。生成的数字如下所示:
a[1] = 1
for i > 1
a[i] = a[i-1]+(i/2)
如何有效地从数组中删除复合数?一种解决方案是用Rabin-Miller检查每个元素的素数。有更有效的解决方案吗?
答案 0 :(得分:2)
请注意,您的递归关系的闭合表单式为:
a[i] = floor([i/2]^2) + 1
因此,当i
为偶数时,您在此数组中寻找的素数类near-square primes和resources exist用于保留一些其他信息。如果这是它的程度,那可能就足够了。
但是,那不是它。当i
是奇数时,它会有点困难。我无法找到针对此案例的解决方案,并且我不得不总结您找到一般解决方案的最佳方法是足够大的Sieve of Erasthenes作为检查所有a[i]
的素数的基础{{} 1}}。由于i
=(1e8)+1,正确实施的筛网将需要大约1.25e7字节(大约13MB)的内存。虽然很大,但在大多数现代计算机上仍然可以管理。当然,如果这是一个嵌入式系统......