问答详情
源自:4-14 结束语句之break语句

为什么这样做可以得出素数?原理是什么不太理解

int m, n;

    for(m=2; m<=50; m++)

    {

for(n=2; n<m; n++)

        {

            if(    m%n==0   )       //什么条件下跳出当前循环

             break;                //这里应该退出当前循环了

}

        if(m == n)   //n循环结束后,如果m=n的话就输出m

            printf("%d  ", m);

}

请问这样的原理是什么?我不太理解


提问者:幕布斯7189648 2019-07-22 22:00

个回答

  • Dreams乄深巷
    2019-08-12 23:30:19

    意思就是当m为5的时候,n从2到4全部走一遍,m%n只要不为0,就代表m可以被其他数除,就不是素数

  • _被搁浅的时光_0
    2019-07-23 10:05:59

    if()的定义  不等于0时候不执行if的内容 n就一直加   加到n<m 不成立停止 或者到符合if定义执行if(我是这么理解的)

  • 小小疾飞
    2019-07-23 09:59:29

    楼上在说什么东西呀,乱七八糟的。素数就是除了1和其本身之外不能被其他数整除的数。第一个for循环是外循环,走到50.第二个for循环是内循环,如果整除了直接跳出循环(不是素数),如果没有的话一直到n==m循环条件不满足,内循环终止。再根据if(m == n)判断是不是走完了整个循环(素数),而不是中间跳出的。

  • 幕布斯7189648
    2019-07-22 22:31:46

    然后m等于6时,n=2,此时6%2==0,跳出循环,但是m不==n(6不==2)所以没有被打印,然后下一个

  • 幕布斯7189648
    2019-07-22 22:30:27

    哦我明白了,是不是m一直等于5,然后n依次等于2,3,4,始终不能使m%n==0,直到n等于5时,因为n不<m导致跳出循环了,此时m=5,n=5,就被打印了

  • 幕布斯7189648
    2019-07-22 22:25:07

    是不是说5%2不等于0并不会退出循坏,而是把n++然后再循环直到有一次m不<0或者m==n时才跳出循环?

  • 幕布斯7189648
    2019-07-22 22:22:25

    就比如说,m=5时,进入第一个循环:n=2,n<m(2<5)符合要求,进入下一层if m%n。m%n就是5%2不等于0,不符合要求,那这个循环就结束了,进入if(m==n),这时5不等于2不符合要求,5就没有被打印,那这个循环也结束了,回到最开始,5就没有被打印出来啊。为什么结果却有一个5