C的第六行开始看不懂了,高手详细指点。

来源:百度知道 编辑:UC知道 时间:2024/04/28 11:10:26
什么用筛选法输出100中的质数,在旁边给详解,谢谢。
主要是为了用for和数组熟点。

#include <math.h>
#define N 101
main()
{
int i,j,line,a[N];
for(i=2;i<N;i++) a[i]=i;
for(i=2;i<sqrt(N);i++)
for(j=i+1;i<N;j++)
{
if(a[i]!=0 && a[j]!=0)
if(a[j]%a[i]==0)
a[j]=0;
}
printf("\n")

for(i=2,line=0;i<N;i++)
{
if(a[i]!=0)
{
print("%5d",a[i]);
line++;
}
if(line==10)
{
printf("\n");
line=0;
}
}
}

//初始化,原先a[i]=i
//最后a[i]不等于0的为质数.
for(i=2;i<N;i++)
a[i]=i;

for(i=2;i<sqrt(N);i++) //枚举i的因数,只要从2到根号i就可以了
for(j=i+1;i<N;j++) //枚举需要判断的数
{
if(a[i]!=0 && a[j]!=0) /*a[j]!=0判断j有没有被判为合数,若为合数则无须再判断,判断i是否是合数,因为只要除以因子就可以了.*/
if(a[j]%a[i]==0) //若余数为零,则不是质数,a[j]赋为0
a[j]=0;
}
printf("\n")

for(i=2,line=0;i<N;i++)
{
if(a[i]!=0) //a[i]不为0,则a[i]为质数
{
print("%5d",a[i]);
line++;
}
if(line==10) //每行输出10个
{
printf("\n");
line=0;
}
}

#include<math.h>
#include<stdio.h>
#define N 101
main()
{
int i,j,line,a[N];
for(i=2;i<N;i++) a[i]=i;
for(i=2;i<sqrt(N);i++) //i 从2到N^0.5 a[i]作为除数,检验j从i+1到N a[j]是否为质数
for(j=i+1;i<N;j++)
{
if(a[i]!=0 && a[j]!=0) //a[i] a[j]都不为0时,这种除法才有意义.(为0表示已经被筛选掉的)
if(a[j]%a[i]==0) //这一句其实也可以