帮忙看看小弟我写的筛选法求1-100以内的素数
帮忙看看我写的筛选法求1-100以内的素数
#include<stdio.h>
#include<math.h>
void main(void)
{
int i,j,t=0,a[100];
for(i=0;i<=99;i++)//将1-100的值赋给a[100]
a[i]=i+1;
for(i=1;i<=sqrt(100)-1;i++)
{
if(a[i]==0)//如果a[i]=0,i加1
i+=1;
else
for(j=i+1;j<=99;j++)/*如果a[i]不等于0,就从a[i+1]到a[99]里面挑出能够整除
a[i]的数,给他们标记为0*/
{
if(a[j]!=0 && a[j]%a[i]==0)
a[j]=0;
}
}
for(i=0;i<=99;i++)
if(a[i]!=0)//如果a[i]不为0,就输出a[i]
printf("%d ",a[i]);
}
程序输出不正确,输出里面含有合数.
------解决方案--------------------
楼主
if(a[i]==0)//如果a[i]=0,i加1
i+=1;
应把 i+=1;换成 continue;
因为你在for中已经加了1了。 当i等于4时,执行完i+=1; i变为5,之后再次进入循环,被for语句中再加一次
变成了6。5被跳过了
#include<math.h>
void main(void)
{
int i,j,t=0,a[100];
for(i=0;i<=99;i++)//将1-100的值赋给a[100]
a[i]=i+1;
for(i=1;i<=sqrt(100)-1;i++)
{
if(a[i]==0)//如果a[i]=0,i加1
i+=1;
else
for(j=i+1;j<=99;j++)/*如果a[i]不等于0,就从a[i+1]到a[99]里面挑出能够整除
a[i]的数,给他们标记为0*/
{
if(a[j]!=0 && a[j]%a[i]==0)
a[j]=0;
}
}
for(i=0;i<=99;i++)
if(a[i]!=0)//如果a[i]不为0,就输出a[i]
printf("%d ",a[i]);
}
程序输出不正确,输出里面含有合数.
------解决方案--------------------
楼主
if(a[i]==0)//如果a[i]=0,i加1
i+=1;
应把 i+=1;换成 continue;
因为你在for中已经加了1了。 当i等于4时,执行完i+=1; i变为5,之后再次进入循环,被for语句中再加一次
变成了6。5被跳过了