コードは、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 。 }