代碼需要使用c99編譯
#include <stdio.h> #include <stdlib.h> #include <math.h> //是否為素數 //從2到x-1測試是否可以整除 //時間復雜度O(n-2),n趨向正無窮 int isPrime(int x) { int ret = 1; for(int i = 2; i < x; i++) { if(x % i == 0) { ret = 0; break; } } return 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; for (int i = 3; i < x; i += 2) { if( x % i == 0) { ret = 0; break; } } return 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; for(int i = 3 ; i < sqrt(x); i += 2) { if( x % i == 0) { ret = 0; break; } } return ret; } //判斷是否能被已知的且<x的素數整除 int isPrime4(int x, int knownPrimes[], int numberOfKnownPrimes) { int ret = 1; int i; for( i = 0; i < numberOfKnownPrimes; i++) { if (x % knownPrimes[i] == 0 ) { ret = 0; break; } } return ret; } int main() { const int number = 100; int prime[number] = {2}; int count = 1; int i = 3; while( count < number ) { if(isPrime4(i ,prime, count)) { prime[count++] = i; } i++; } for( i = 0; i < number; i++) { printf("%d",prime[i]); if( (i + 1) % 5 ) printf("\t"); else printf("\n"); } return 0; }