C++中此代码构造的解释

68de4m5k  于 2023-01-22  发布在  其他
关注(0)|答案(1)|浏览(136)

我无法理解下面的代码。
我的怀疑是当break语句被执行时,指针会指向if(i==num)或者指向更大的for循环。
例如,如果num=6,则break语句将在i=5执行,但在此之后i将更新为6。那么,当i=6num=6同时执行时,为什么输出中不打印6?

#include <iostream>
using namespace std;

// prime numbers whithin a given range

int main()
{
    int a, b;
    cout << "enter 2 nos : " << endl;
    cin >> a >> b;

    for (int num = a; num <= b; num++) // for range from a to b
    {
        int i;
        for (i = 2; i < num; i++) // for checking whether no is prime or not
        {
            if (num % i == 0)
            {
                break;
            }
        }

        if (i == num)
        {
            cout << num << ", ";
        }
    }

    return 0;
}
8fsztsew

8fsztsew1#

num6为例,该内循环将从2开始,6 % 2 * 不 * 等于0,因此内循环中断,现在i22不等于6,因此不输出该数字。
如果我们考虑num等于5的情况,那么内部循环从2迭代到45不能被其中的任何一个整除,所以循环自然退出,i递增到5。由于5等于5,所以输出数字。
对于很长的范围,这是相当低效的。建议阅读:Sieve of Eratosthenes .

相关问题