将2~100之间的素数存入数组的算法思路。(小优化)

这篇博客介绍了如何优化求2~100之间素数并存入数组的算法,避免重复劳动,提高运行效率。作者提出两种思路,对比了它们的优缺点:思路1先找素数个数再创建数组,效率较低;思路2预先创建足够大的数组,直接存储素数,空间占用大但速度快。作者推荐使用思路2的解法,强调了优化代码思路的重要性。
摘要由CSDN通过智能技术生成

这个和上一篇的求素数的思路有点小改动(主要是因为要存入数组)。

这是求素数的思路那一篇的地址

  • 具体的改动是这样的:

如果按正常的思路应该是(思路1):

  1. 先通过for循环找到素数的个数–>count
  2. 然后创建数组,数组的长度为count–>int[] newArr = new int[count];
  3. 再重复步骤1,把count改成数组存值–>newArr[a++] = i;(这里的a重复count的下标作用 int a=0)

但是,你应该发现了,步骤1和步骤3其实是重复劳动了!。而且因为都是大循环(几百次),所以执行效率会很慢。
往好的方面想,万一循环几百万次呢?那得卡到吃完饭吧?

所以就有了下面的新思路,小小的优化了下。
请看我如何分解(思路2:):

  1. 先创建一个足够大的长度的数组。(【多大呢?区间里的一半儿就够了。比如找100内的,就是50了。因为素数必须是奇数!。】)
  2. 通过for循环找到素数的个数–>count,并且将素数存入数组。【这里的count还能当下标用。(思路1的count不能。)】
  3. 创建新数组,长度为count --> newArr[count]
  4. 直接将原数组的 “有效值” 存入新数组中即可。
  5. 删除原数组。
  6. 完毕。

很明显,思路2的优点是:运行效率高!缺点也有,就是会占用较大空间
思路1的优缺点刚好相反:虽然占用空间小,但是运行速率相对较慢

综上所诉:个人比较推荐 思路2 的解法。

下面放上思路2的代码:
public class Test {
   
    public static void 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值