求素数的另类方法
基本思路是先设某个范围内所有数全为素数。然后从最小素数的倍数开始去除合数,然后从第二小的素数倍数去除合数,直
至所有合数去除完成。
这种求素数方法效率相当高,我试了一下求100以内的素数只须跑4次循环,
求1000以内的素数只须跑11次。
不多说贴代码:
#include <stdio.h>
#define MAXNUM 1000
main ()
{
int prime[MAXNUM]; //记录数据类型,1为素数,0为合数
int i,j,c=0,count=0;
for( i=2;i<MAXNUM;i++)
{
prime[i]=1; //初始化数组
}
for(i=2;i*i<MAXNUM;i++)
{
if(prime[i]==1)
{
for(j=i*2;j<MAXNUM;j++)
{
if(!prime[j])continue;
if(j%i==0)prime[j]=0; //是合数置0
}
count++;
}
}
for(i=2;i<MAXNUM;i++)
{
if(prime[i]==1)
{
c++;
printf("%2d ",i);
if(c%10==0)
printf("\n");
}
}
printf("\n走了%d次循环",count);
}