#include<iostream>
using namespace std;
int prime(int n)
{
if(n%2==0)
return (n==2);
if(n%3==0)
return 0;
if(n%5==0)
return 0;
for(int i=7;i*i<n;i=i+2)
if(n%i==0)return 0;
return 1;
}
int main()
{
int N;
cout<<"请输入一个数int:"<<endl;
while(1)
{
cin>>N;
if(!cin||N<2)
{
cin.clear();
cout<<"请重新输入!";
continue;
}
break;
}
int total=0;
for(int i=2;i<=N;i++)
{
if(prime(i))
{
cout<<i<<endl;
total++;
}
}
cout<<"一共有"<<total<<"个素数。";
system("pause");
}
第一个问题:如果用户输入的值小于2,或者输入非法就要求重新输入。然而那一段代码我在编译的时候,输入的如果是负数的确可以正常运行,然而如果输入一个字符,那么while将无限循环,无限出现“请重新输入”。这是为什么?
第二个问题,我尝试了一下,100以内素数的个数是对的。然而我在求1000以内的素数个数的时候,出现了174个,实际上是168个,为什么多了几个呢?问题出在哪里呢,如果代码有问题,为什么数字小的时候却没有出错呢?
慕用1759030
努力提升
努力提升
相关分类