疑问:用C语言求100以内的素数问题

来源:百度知道 编辑:UC知道 时间:2024/05/22 16:15:12
请问下程序里为什么for(i=2;i<sqrt(100);i++)而不是for(i=2;i<=sqrt(100);i++)呢
#include<math.h>
main()
{int i,j,n,a[11];
for(i=1;i<=100;i++)
a[i]=i;
for(i=2;i<sqrt(100);i++)
for(j=i+1;j<=100;j++)
{if(a[i]!=0&&a[j]!=0)
if(a[j]%a[i]==0)
a[j]=0;}
printf("\n");
for(i=2,n=0;i<=100;i++)
{if(a[i]!=0)
{printf("%5d",a[i]);
n++;}
if(n==10)
{printf("\n");
n=0;}
}
}
那同样还是这种类型,改为10以内的素数,按照下面的运行结果我算的是:2 3 5 7 9 但是运行程序所得的结果确是:2 3 5 7,这个为什么没有9呢,按照程序执行的话在i=3的时候for(i=2;i<sqrt(10);i++)这个不成立啊,应该退出循环啊
#include<math.h>
main()
{int i,j,n,a[11];
for(i=1;i<=10;i++)
a[i]=i;
for(i=2;i<sqrt(10);i++)
for(j=i+1;j<=10;j++)
{if(a[i]!=0&&a[j]!=0)
if(a[j]%a[i]==0)
a[j]=0;}
printf("\n");
for(i=2,n=0;i<=10;i++)
{if(a[i

应为要判断是素数,这要他被他自身前面的任意一个数整除他就不是素数,说以到99就可以了。
其实不用那么复杂,刚循环到二就已经不循环了,我给你一个你看看吧:
#include "stdio.h"
main()
{int x,y,z;

for(x=1;x<=100;x++)
{

if(x%2||(x==2))

printf("%d ",x);

}

}

#include <math.h>
void main()
{int i,m,n,k;
for(m=1;m<101;m++)

for (i=2;i<m;i++)
if (m%i==0) break;
if (i<k)printf("%d not is prime number\n",m);
n+=1;
else printf("%d is prime number \n");
n+=1;
}

因为一个整数x,它的因数是成对出现的,如30的因数:1和30,2和15,
3和10...如果它小于等于它的平方根的数中没有它的因数,那么大于它的平方跟的数中就不可能有了,所以就不用比较了,减少了循环次数。
i=3时怎么会不成立呢?根号10等于大于3啊?而且10以内的素数怎么会有9呢?9怎么会是素数呢?他有因数3啊!