Mr. Mojo Risin
02-15-2006, 10:12 AM
I'm trying to do an exercise to find prime numbers using The Sieve of Eratosthenes in C++. I have been working at this for hours and can't get it to work right, so maybe someone can help? I don't know if I'm close or totally off. There's some extra code I put in here to kinda debug things by printing variables and the array, but I'm still lost. My approach is to use a two-dimensional array. The first row has either a 1 or 0. A 1 means the number in the corresponding second row is a prime number. As I understand it, The Sieve approach has you mark multiples of 2 and then 3, etc.
Here's the code I have so far:
#include <iostream>
using namespace std;
void initializeArray(int primeNumbers[][500]);
void findPrimeNumbers(int primeNumbers[][500]);
void printPrimes(int primeNumbers[][500]);
int main()
{
int primeNumbers[2][500];
initializeArray(primeNumbers);
findPrimeNumbers(primeNumbers);
//printPrimes(primeNumbers);
for (int j = 0; j < 500; j++)
cout << " " << primeNumbers[0][j];
return 0;
}
void initializeArray(int primeNumbers[][500])
{
for (int x = 0; x < 500; x++){
primeNumbers[0][x] = 1;
primeNumbers[1][x] = x;
}
}
void findPrimeNumbers(int primeNumbers[][500])
{
for (int x = 2; x < 499; x++){
cout << " x is " << x;
if (primeNumbers[0][x] == 1){
int z = primeNumbers[1][x];
cout << " z = " << z;
for (int y = primeNumbers[1][x]; y <= 500; y += z){
cout << " y is " << y;
primeNumbers[0][y + y] = 0;
}
}
}
}
void printPrimes(int primeNumbers[][500])
{
for (int x = 0; x < 500; x++){
if (primeNumbers[0][x] == 1)
cout << primeNumbers[1][x] << " is a prime number" << endl;
}
}
Here's the code I have so far:
#include <iostream>
using namespace std;
void initializeArray(int primeNumbers[][500]);
void findPrimeNumbers(int primeNumbers[][500]);
void printPrimes(int primeNumbers[][500]);
int main()
{
int primeNumbers[2][500];
initializeArray(primeNumbers);
findPrimeNumbers(primeNumbers);
//printPrimes(primeNumbers);
for (int j = 0; j < 500; j++)
cout << " " << primeNumbers[0][j];
return 0;
}
void initializeArray(int primeNumbers[][500])
{
for (int x = 0; x < 500; x++){
primeNumbers[0][x] = 1;
primeNumbers[1][x] = x;
}
}
void findPrimeNumbers(int primeNumbers[][500])
{
for (int x = 2; x < 499; x++){
cout << " x is " << x;
if (primeNumbers[0][x] == 1){
int z = primeNumbers[1][x];
cout << " z = " << z;
for (int y = primeNumbers[1][x]; y <= 500; y += z){
cout << " y is " << y;
primeNumbers[0][y + y] = 0;
}
}
}
}
void printPrimes(int primeNumbers[][500])
{
for (int x = 0; x < 500; x++){
if (primeNumbers[0][x] == 1)
cout << primeNumbers[1][x] << " is a prime number" << endl;
}
}