题目:求100之内的素数

来源:百度知道 编辑:UC知道 时间:2024/05/24 07:22:45
#include <stdio.h>
#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++)这一句i<sqrt(N);什么意思,为什么改为N也可以运行正确
for(j=i+1;j<N;j++) 这一句改为j<sqrt(N);为何又不能运行正确.
{
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)
{printf("%5d",a[i]);
line++;}
if(line==10)
{printf("\n");
line=0;}
}
}

for(i=2;i<sqrt(N);i++)这一句i<sqrt(N);什么意思,为什么改为N也可以运行正确
for(j=i+1;j<N;j++) 这一句改为j<sqrt(N);为何又不能运行正确.

这是一个技巧
比如:
判断 81是否素数,只需判断81除2 3 4 。。。9只要没除尽的数就是素数
9就是81开平方了

质数的判别方法这里采用的是除法,即对j用所有小于i大于2的数去除,如果能除尽则i不是质数,这里由于求的是小于101的质数,故这里的除数范围限制在2到sqrt(101)之间即可以了,超过这个范围当然也正确,但是多余,这就是为什么
for(i=2;i<sqrt(N);i++)这一句i<sqrt(N);
这一句改成N也正确的原因。
这里的j是要判别是否为正确的质数的数,当然不能用sqrt(N)了,j的范围是2到N之间(你的程序里a[j]=j,所以用j和a[j]是一样的)。

for(i=2;i<sqrt(N);i++)这一句i<sqrt(N);什么意思,为什么改为N也可以运行正确
sqrt(N); 是 N的平方根 如果只算平方根的话可以少循环几次就能的出结果 当然你用N来算就是多循环几次
for(j=i+1;j<N;j++) 这一句改为j<sqrt(N);为何又不能运行正确.
这里就不行了 这里只能用N