初学者的一个C++的程序问题?

来源:百度知道 编辑:UC知道 时间:2024/06/18 13:38:47
作业要求“用筛选法求100之内的素数”
下面是我写的程序代码,但运行结果为什么连许多如15,99之类的非素数都输出了呢?哪位高手指教一下啊,小弟不胜感激!!!!!!!!!!!

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
int a[100],i,j;
for(i=1;i<=100;i++)
{
a[i]=i; // 赋值
for(j=2;j<=sqrt(a[i]);j++)//判别素数
{
if(a[i]%j==0){a[i]=0;break;}//非素数赋为0
if(a[i]!=0){cout<<setw(5)<<a[i];break;}//输出非0数,即素数
}
}
return 0;
}

这样的问题,鼓励自己调查,只要跟踪一下很容易发现问题所在的.
下面是修改后的程序.对照着看一下吧.

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main()
{
int a[100],i,j;
for(i=1;i<=100;i++)
{
a[i]=i;
for(j=2;j<=sqrt(a[i]);j++)
{
if(a[i]%j==0)
{
a[i]=0;
break;
}
}
if(i>2 && a[i]!=0)
{
cout<<setw(5)<<a[i];
}
}
return 0;
}