首页 > 代码库 > 标记素数法(模板)+素数打表

标记素数法(模板)+素数打表

#include <stdio.h>#include <string.h>#define N 3000000int f[3000000];int main(){	memset(f, 0, sizeof(f));	int i, j;	f[0]=1;	f[1]=1;	for(i=2; i<=N; i++)	{		if(f[i]==0)		{			for(j=i*2; j<=N; j+=i)			{				f[j]=1; //不是素数			}		}	} // 打印所有发f[i]==0, 即为素数	for(i=2; i<=N; i++)	{		if(f[i]==0)			printf("%d  ", i );	}	return 0;}

 

#include <stdio.h>#include <string.h>#include <math.h>#define N 3000000int c=0;int f[3000000];int prime[1000000];int main(){	int i, j;    memset(f, 0, sizeof(f));	f[0]=1;	f[1] =1;	for(i=2; i<=N; i++)	{		if(f[i]==0)		{			prime[c++] = i;			for(j=2*i; j<=N; j+=i )			{				f[j]=1;			}		}	}	for(i=0; i<=1000; i++)	{			printf("%d  ", prime[i] );	}	return 0;}

 素数打表法二:

#include<stdio.h>  #include<string.h>  #define N 1000005int prime[100005];  int flag[1000005];  int e;  void getP()  // 素数打表,找出素数存栈  {  	int i, j;  	e = 0;  	memset(flag, 0, sizeof(flag) ); //标记初始化		for ( i=2; i<N; i++)  	{  		if ( flag[i]==0 ) 		{			prime[e++] = i; //进栈  		}		for ( j=0; j<e && i*prime[j]<N; j++ )  		{  			flag[ i * prime[j] ] = 1;  		}  	}  }