Comp Sci Find primes using sieve of erasthothenes by way of bit arrays in C++

AI Thread Summary
The discussion focuses on implementing the Sieve of Eratosthenes in C++ using bit arrays to find prime numbers. The user initially struggles with bit manipulation and the correct syntax for checking bits in the array. Key corrections include using parentheses to ensure proper order of operations in conditional statements. After applying the suggested changes, the user reports that their program is functioning correctly. The conversation highlights the importance of understanding bitwise operations in programming.
necromanzer52
Messages
12
Reaction score
0
Hey. I have to create a program in C++ to calculate the number of prime numbers up to a specified number. I also have to print out the first and last 5, but I'll cross that bridge when I come to it.

I can do this fine with integers, but we have to do it where each slot in an array represents 32 bits. We have to use bitshifting to make each bit a 1 for a prime, and a 0 for a non-prime. It wasn't explained to us very well how we're supposed to do this, and I can't find any useful information on the internet. Here's what I have so far:

#include <iostream>
using namespace std;

#define N 100 // size of sieve used
#define size ((N+31)/32) //32 bits per integer hard coded
int sieve[size]; //declare array of bits

int main ()
{
int i, j, m, product, count;
count = 0;

for (i=0;i<size;i++)
{
sieve = 0xFFFFFFFF;
}
sieve [0] = 0xFFFFFFFC;

for (j=0;j<32;j++)
{
if (sieve[0] & (1 << j) == 1) //find the next prime
{
count++; //count the prime
product = 0;
for (m=2;product<32;m++) // set each multiple of the prime to 0.
{
product = m*j;

sieve[0] &~(1<<product);

}

}
}



cout << count << endl;

return 0;
}

This is just my attempt to count the number of primes in the first 32 numbers, and it just keeps giving an output of 0.
I'm completely lost, and any help would be appreciated.
 
Physics news on Phys.org
C / C++ treat & as lower precendece than == (considered a flaw by some). Use parenthesis to force the order of operations:

Code:
		if ((sieve[0] & (1 << j)) == 1)     //find the next prime
 
That changed absolutely nothing.
 
It should be:

Code:
		if ((sieve[0] & (1 << j)) == (1 << j))     //find the next prime
or
Code:
		if ((sieve[0] & (1 << j)) != 0)     //find the next prime
 
Ah. Thanks for that. I think I have it working now.
 
Thread 'Have I solved this structural engineering equation correctly?'
Hi all, I have a structural engineering book from 1979. I am trying to follow it as best as I can. I have come to a formula that calculates the rotations in radians at the rigid joint that requires an iterative procedure. This equation comes in the form of: $$ x_i = \frac {Q_ih_i + Q_{i+1}h_{i+1}}{4K} + \frac {C}{K}x_{i-1} + \frac {C}{K}x_{i+1} $$ Where: ## Q ## is the horizontal storey shear ## h ## is the storey height ## K = (6G_i + C_i + C_{i+1}) ## ## G = \frac {I_g}{h} ## ## C...

Similar threads

Replies
3
Views
1K
Replies
21
Views
3K
Replies
36
Views
422
Replies
5
Views
2K
Replies
4
Views
1K
Back
Top