m0_59481954 2021-10-15 23:20 采纳率: 100%
浏览 20
已结题

关于力扣“计算质数”这一题的一些疑问

是这样的,这题我试着用“线性筛”的方法进行求解,在解题的过程中发现了这样一个问题,令我很困惑,首先一个代码如下


```java
class Solution {
    public int countPrimes(int n) {
        //存放质数的集合
        int[] primes = new int[n+1];

        int num = 0;

        //标记是否为质数
        boolean[] bp = new boolean[n+1];

        for (int i = 2; i < n; i++) {
            if (!bp[i]){
                primes[num++] = i;
            }

            for(int j = 0;j < num ;j++){
                if( i * primes[j] < n){
                    bp[i*primes[j]] = true;
                }
                
                //  **关键点在这里**
                if (i % primes[j] == 0) {
                    break;
                }
            }
        }

        return num;

    }
}


img


可以看到,在这里int类型的运算超出表示范围了,所以报错了,但是,如果换一种写法,如下:

class Solution {
    public int countPrimes(int n) {
        //存放质数的集合
        int[] primes = new int[n+1];

        int num = 0;

        //标记是否为质数
        boolean[] bp = new boolean[n+1];

        for (int i = 2; i < n; i++) {
            if (!bp[i]){
                primes[num++] = i;
            }

            for(int j = 0;j < num && i * primes[j] < n;j++){
                bp[i*primes[j]] = true;
                if (i % primes[j] == 0) {
                    break;
                }
            }
        }

        return num;

    }
}

也就是把判断放到for循环的判断语句里了,结果如下:

img

所以说判断语句放在for循环的循环体里和放在for循环的判断语句里是有所不同的吗?
到底有什么不同呢?希望有人能帮我答疑解惑

  • 写回答

1条回答 默认 最新

  • 想上天的狗 2021-10-15 23:25
    关注

    你放循环体里万一超出范围还会赋值,最后只能报错。而放判断语句里它会先判断是否会超出范围,一旦超出它就退出,也就不会执行赋值

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月23日
  • 已采纳回答 10月15日
  • 创建了问题 10月15日

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)