Return to the BobbyGriggs.com C++ Nook


Chapter 8 - Sieve of Erasothenes
© 1998 by Bobby Griggs.



// Program name:  Sieve

// Purpose:  To implement the sieve of Erasothenes to compute prime

// numbers between 2 and a number input by the user.



// Win32 console application



#pragma hdrstop



#include < iostream.h >

#include < fstream.h >

#include < math.h >

#include < assert.h >

#include < stdio.h >

#include < conio.h >



#define PRIME_FILE "primes.dat"

#define MAX 64000



void User_input(int &number);

void Find_primes(int number,bool primes[MAX]);

void Primes_to_file(int number,bool primes[MAX]);



void main()

{

	int number;

	bool primes[MAX];



	User_input(number);

	Find_primes(number,primes);

	Primes_to_file(number,primes);

	return;

}



void User_input(int &number)

{

	number = 1;

	while ((number < 2) || (number > MAX))

	{

		cout << "Find Prime Numbers" << endl << endl;

		cout << "Find the prime numbers between 2 and ... ";

		cin >> number;

		cout << endl;

		if ((number < 2) || (number > MAX))

		{

			cout << "The number must be between 2 and " << MAX;

			cout << "!" << endl << endl;

		}

	}

	return;

}



void Find_primes(int number,bool primes[MAX])

{

	int count,count1;



	for (count = 2;count <= number;count++)

		primes[count] = true;

	for (count = 2;count <= (int)(sqrt(number));count++)

	{

		for (count1 = count;count1 <= (number / count);count1++)

			primes[count * count1] = false;

	}

	count1 = 0;

	for (count = 2;count <= number;count++)

	{

		if (primes[count] == true)

			count1++;

	}

	cout << count1 << " prime number have been stored in the file.";

	cout << endl << endl;

	cout << "Press any key to continue ... " << endl;

	getche();

	return;

}



void Primes_to_file(int number,bool primes[MAX])

{

	ofstream prime_file;

	int count;



	prime_file.open(PRIME_FILE);

	remove(PRIME_FILE);

	prime_file.close();

	prime_file.open(PRIME_FILE);

	assert(!prime_file.fail());

	for (count = 2;count <= number;count++)

	{

		if (primes[count] == true)

			prime_file << count << " ";

	}

	prime_file.close();

	return;

}