1. 程式人生 > >素數三種求法總結 (素數詳解)

素數三種求法總結 (素數詳解)

#include<stdio.h>
#include<string.h>
#include<math.h>
// 第一種  利用素數 分佈規律
 
int isprime1( int n ){
	int tmp;
	if( n < 5){ 
	    if( n== 2 || n==3 )
	       return 1;
	    else return 0; 
	 }
	 
	 if(n %6!= 1&&n %6!= 5)  
            return 0 ; 
	tmp = sqrt( n );
	for( int i=5;i<= tmp;i+=6)
	      if( n % i == 0 || n %( i+2) == 0)
	               return 0;
	 return 1; 
}
 // 第二種 :暴力列舉
int isprime2( int n){
	
	if( n ==1)
	   return 0;
	 for( int i=2;i*i<=n;i++)
	       if( n % i==0)
		      return 0;  
     return 1;  	
	
}
// 第三種: 素數打表 也就是素數篩法
int prime[101];
int isprime3(  ){
    memset( prime , 1 ,sizeof(prime));
    prime[1] = 0;
	for(  int i=2;i<=100;i++)
        	if( prime[i])
        		for( int j=i+i;j<=100;j+=i)
		             prime[j] = 0;
	 
	
}

int main(void){
	//素數 打表 
	isprime3();
	for( int i=1;i<=100;i++){ 
	      if( isprime1( i )  )
	         printf(" %d is prime      **** ",i);
	      if( isprime2( i )  )
	            printf(" %d is prime      **** ",i);
	      if( prime[i] )
             printf(" %d is prime      **** ",i);
	 }
	return 0;
}