素數三種求法總結 (素數詳解)
阿新 • • 發佈:2018-12-15
#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; }