shallow丶 发表于 2021-12-23 21:24:52

第八行这里if(j>=i)是为什么啊,

int fun(int lim, int aa)
{
        int i, j, k = 0;
        for (i = 2; i <= lim; i++) //求出小于或等于lim的素数
        {
                for (j = 2; j < i; j++)
                        if (i % j == 0)break;
                if (j >= i)
                        aa = i;
        }
        return k;
}

shallow丶 发表于 2021-12-23 21:35:20

按照他这个循环j永远不会大于或等于i啊

ppp2530 发表于 2021-12-23 22:20:15

j >= 2 说明上面的循环过程中的判断条件 i % j == 0 没有一次是成立的,当循环结束的时候 j 是等于 i 的,如果中间有一次 i % j == 0 成立的话回循环提前结束,j 一定是小于 i,也就是说这个 i 一定不是素数,这个判断条件也可以直接写成j == i。

番杰 发表于 2021-12-24 17:04:03

本帖最后由 番杰 于 2021-12-24 17:05 编辑

执行for (j = 2; j < i; j++)的时候;
不满足这个循环时,不就是j>=i的情况吗,

举个例子:i = 3 ;

循环开始时:
1)j = 2,小于i(3),进入for循环,
进行if (i % j == 0);3%2 =2,不等于0,不满足条件,无法执行break;
所以继续循环:执行j++ ;此时j = 3;

2)j = 3 ,不小于i(3),退出for循环;
执行if (j >= i);此时:j = 3,i = 3 ;
满足条件;不存在你说的那个情况。

另外,这个数组aa就是用来存放比i小的素数的。

再另外,当i不是素数时,j就不可能出现j>=i的情况。
页: [1]
查看完整版本: 第八行这里if(j>=i)是为什么啊,