我无法理解下面的代码。
我的怀疑是当break
语句被执行时,指针会指向if(i==num)
或者指向更大的for
循环。
例如,如果num=6
,则break
语句将在i=5
执行,但在此之后i
将更新为6。那么,当i=6
和num=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;
}
1条答案
按热度按时间8fsztsew1#
以
num
为6
为例,该内循环将从2
开始,6 % 2
* 不 * 等于0
,因此内循环中断,现在i
为2
,2
不等于6
,因此不输出该数字。如果我们考虑
num
等于5
的情况,那么内部循环从2
迭代到4
。5
不能被其中的任何一个整除,所以循环自然退出,i
递增到5
。由于5
等于5
,所以输出数字。对于很长的范围,这是相当低效的。建议阅读:Sieve of Eratosthenes .