关于一段代码的疑问
#include "stdafx.h"#include<math.h>
#include <iostream>
using namespace std;
int main()
{
int nStart=0,nEnd=0; //整数区间的最小值和最大值
int nCnt1=0,nCnt2=0; //循环计数器
int nSqrt; //存储平方根值
int nNum=0; //计算出的素数个数
cout<<"输入整数区间的最小值:";
cin>>nStart;
cout<<"输入整数区间的最大值:";
cin>>nEnd;
for(nCnt1=nStart;nCnt1<=nEnd;nCnt1++){ //利用循环分别验证每一个数是否为素数
nSqrt=sqrt(nCnt1); //sqrt()为求平方根函数,其原型在math.h中
//以下循环是判断nCnt1是否能被2到nSqrt整除
for(nCnt2=2;nCnt2<=nSqrt;nCnt2++)
if(nCnt1%nCnt2==0) break; //如果能整除,说明为非素数,循环退出
if(nCnt2>=nSqrt+1){
cout<<nCnt1<<" ";
nNum=nNum+1;
};
if(nNum%10==0) cout<<endl; //每输出10个素数,则进行换行
};
cout<<"共有"<<nNum<<"个素数。"<<endl;
return 0;
}
这段代码是求给定一个任意区间内所有的素数。
代码是没有问题,VC上也能运行,但是小弟有一个问题不明白。
假如nCnt1=2,则nSqrt=√2.
然后进入第二个for语句,nCnt2<=nSqrt不成立,退出。
到下一个if语句,if(nCnt2>=nSqrt+1)明显也是不成立的,那计算机最后是怎么会显示2的呢?但是计算机确实显示了2.
还请各位大哥大姐指点。。。