问C++小问题

来源:百度知道 编辑:UC知道 时间:2024/06/09 17:57:24
一道求素数的题目
#include<iostream.h>
#include<iomanip.h>
#include<math.h>

bool isprime(int m);

int main()
{
int a,b,m;
cin>>a>>b;
if((a!=2)&&(a%2==0))a++;
for(m=a;m<=b;m+=2){
if(isprime(m))cout<<m;}
return 0;
}

bool isprime(int m)
{
if(m==2)return true;
int sqrtm=sqrt(m);
for(int i=2;i<=sqrtm;i++)
if(m%i==0)break;
if(i>sqrtm)return true;
else return false;
}

有几个问题...为什么这样做不能输出素数2...
bool isprime函数里的for语句里的i<=sqrtm为什么不能去掉??
为什么哦

改进代码:
因为你只判断奇数,不判断偶数,所以漏掉了2

#include<iostream.h>
#include<iomanip.h>
#include<math.h>

bool isprime(int m);
bool isprime(int m)
{
if(m==2)return true;
int sqrtm=sqrt(m);
for(int i=2;i<=sqrtm;i++)
if(m%i==0)break;
if(i>sqrtm)return true;
else return false;
}
int main()
{
int a,b,m;
cin>>a>>b;
if(isprime(2))cout<<2<< endl;
if(a%2==0)a++; //你在这里决定只对奇数作判断,下边用了m+=2
for(m=a;m<=b;m+=2){
if(isprime(m))cout<<m<< endl;}
return 0;
}

if((a!=2)&&(a%2==0))a++;
for(m=a;m<=b;m+=2){
if(isprime(m))cout<<m;}
return 0;
改成
if((a>=2)&&(a%2==0))a++;
for(m=a;m<=b;m+=2){
if(isprime(m))cout<<m;}
return 0;

1