这个和上一篇的求素数的思路有点小改动(主要是因为要存入数组)。
如果按正常的思路应该是(思路1):
- 先通过for循环找到素数的个数–>count
- 然后创建数组,数组的长度为count–>int[] newArr = new int[count];
- 再重复步骤1,把count改成数组存值–>newArr[a++] = i;(这里的a重复count的下标作用 int a=0)
但是,你应该发现了,步骤1和步骤3其实是重复劳动了!。而且因为都是大循环(几百次),所以执行效率会很慢。
往好的方面想,万一循环几百万次呢?那得卡到吃完饭吧?
所以就有了下面的新思路,小小的优化了下。
请看我如何分解(思路2:):
- 先创建一个足够大的长度的数组。(【多大呢?区间里的一半儿就够了。比如找100内的,就是50了。因为素数必须是奇数!。】)
- 通过for循环找到素数的个数–>count,并且将素数存入数组。【这里的count还能当下标用。(思路1的count不能。)】
- 创建新数组,长度为count --> newArr[count]
- 直接将原数组的 “有效值” 存入新数组中即可。
- 删除原数组。
- 完毕。
很明显,思路2的优点是:运行效率高!缺点也有,就是会占用较大空间。
而 思路1的优缺点刚好相反:虽然占用空间小,但是运行速率相对较慢。
综上所诉:个人比较推荐 思路2 的解法。
下面放上思路2的代码:
public class Test {
public static void