本文共 4207 字,大约阅读时间需要 14 分钟。
#include#define MAXSIZE 100#define YES 1#define NO 0int main(void){ int prime[MAXSIZE]; /* array to contains primes */ int gap = 2; /* increasing gap = 2 and 4 */ int count = 3; /* no. of primes */ int may_be_prime = 5; /* working variable */ int i, is_prime; prime[0] = 2; /* Note that 2, 3 and 5 are */ prime[1] = 3; /* primes. */ prime[2] = 5; while (count < MAXSIZE) { /* loop until prime[] full*/ may_be_prime += gap; /* get next number */ gap = 6 - gap; /* switch to next gap */ is_prime = YES; /* suppose it were a prime*/ for (i = 2; prime[i]*prime[i] <= may_be_prime && is_prime; i++) if (may_be_prime % prime[i] == 0) /* NO */ is_prime = NO; /* exit */ if (is_prime) /* if it IS a prime... */ prime[count++] = may_be_prime; /* save it */ } printf("\nPrime Number Generation Program"); printf("\n===============================\n"); printf("\nFirst %d Prime Numbers are :\n", count); for (i = 0; i < count; i++) { if (i % 10 == 0) printf("\n"); printf("%5d", prime[i]); } return 0;}
/* ------------------------------------------------------ *//* FUNCTION sieve : *//* This program uses Eratosthenes Sieve method to *//* generate all primes between 2 and MAXSIZE*2+3. This *//* is a very simple yet elegant method to generate primes *//* *//* Copyright Ching-Kuang Shene July/01/1989 *//* ------------------------------------------------------ */#include#define MAXSIZE 200#define DELETED 1#define KEPT 0void main(void){ int sieve[MAXSIZE+1]; /* the sieve array */ int count = 1; /* no. of primes counter */ int prime; /* a generated prime */ int i, k; /* working variable */ printf("\nEratosthenes Sieve Method"); printf("\n========================="); printf("\n\nPrime Numbers between 2 and %d\n", MAXSIZE*2+3); for (i = 0; i <= MAXSIZE; i++) /* set all items to be*/ sieve[i] = KEPT; /* kept in the sieve */ for (i = 0; i <= MAXSIZE; i++) /* for each i, it */ if (sieve[i] == KEPT) { /* corresponds to 2i+3*/ prime = i + i + 3; /* if it is not sieved*/ count++; /* prime=2i+3. */ for (k = prime + i; k <= MAXSIZE; k += prime) sieve[k] = DELETED; /* screen multiple*/ } printf("\n%6d", 2); /* output part. */ for (i = 0, k = 2; i <= MAXSIZE; i++) if (sieve[i] == KEPT) { if (k > 10) { printf("\n"); k = 1; } printf("%6d", 2*i+3); k++; } printf("\n\nThere are %d primes in total.", count);}
转载地址:http://xnnvi.baihongyu.com/