C言語と改善アルゴリズムは、素数を見つけます

コードは、C99コンパイラを使用する必要があります

する#include <stdio.hに> 
する#include <STDLIB.H> 
の#include <math.h>の
 // 素数
 // X-1で割り切れるかどうかをテストするために2から 
 // O(N-2)の時間計算量、 Nは正の無限大になる傾向がある
intを isPrime(INT X)
{ 
    int型 RET = 1 ;
     のためのint型 I = 2 ; IはXに<Iは++ 
    { 
        IF(Xは、%I == 0 
        { 
            RET = 0 ;
             BREAK ; 
        } 
    } 
    戻りRET ; 
} 

//2に加えて、全てではないにも素数、3からX-1に、2インクリメント 
 // Xである時の複雑さOの偶数((N - 3)/ 2 + 1)
 // Xが大きい時の複雑(N / 2)に近いの
INT isPrime2(INT X)
{ 
    int型 RET = 1 ;
     IF(X == 1 ||(X%2 == 0 && X =!2 ))
        RET = 0 ; 
        
    のためのint型 Iが= 3 ; IはXに<; I + = 2 
    { 
        IF(%IのXの== 0 
        { 
            RET = 0 BREAK ; 
        } 
    } 
    
    戻りRET; 
} 

// X-1の必要性、SQRTする(X) 
 // O(Log2n)の時間複雑即ちSQRT(X)
INT isPrime3(INT X)
{ 
    int型 RET = 1 ; 
    
    IF(X == 1 || Xの%2 == 0 && X =!2 
        RET = 0 ;
     のためのINT I = 3 ; I <SQRT(X)、I + = 2 
    { 
        IF(%IのXの== 0  
        {
            RET = 0 ;
             BREAK ; 
        } 
    } 
    
    戻りRET; 
} 

// プライム分析と<Xか否かを知ることができる分割
INT isPrime4(INT X、INT knownPrimes []、INT numberOfKnownPrimes)
{ 
    int型 RET = 1 ;
     int型I。
    
    以下のための(I = 0 ;私はnumberOfKnownPrimesを<; Iは++ 
    { 
        IF(X%knownPrimes [I] == 0 
        { 
            RET = 0 破ります; 
        } 
    } 
    
    戻りRET。
} 
 
int型のmain()
{ 
    のconst  int型の数= 100 INT素数[番号] = { 2 }。
    int型のカウント= 1 ;
    int型私= 3 ; 
    
    一方、(数< 数)
    { 
        場合(isPrime4は、(i、プライム、カウント))
        { 
            プライム[カウント ++] = I。
        } 
        私は ++します; 
    } 
    
    のための(I = 0; 私は数を<; I ++ 
    { 
        のprintf(" %dの" 、プライム[I])。
        もし((I + 1)%5)のprintf(" \ tの" )。
        のprintf(" \ nを" ); 
    } 
    戻り 0 
}

 

おすすめ

転載: www.cnblogs.com/passedbylove/p/11332794.html