Ejemplo n.º 1
0
int main(int argc, char *argv[]) {
	/*
	printf("Argument count: %d\n", argc);
	for (int i = 0; i < argc; i++) {
		printf("Argument vector values:%s at %p memory\n", argv[i], argv[i]);
		for (char *j=argv[i]; *j!='\0'; j++) {
			printf("Another way to print argument vector values: "
                               "%c at %p memory\n", *j, j);
		}
	}
	*/

	bool flag[N];
	memset(flag,1,N*sizeof(bool));

	flag[0] = 0;
	flag[1] = 0;
	int prime = 2;

	while (prime < N) {
		crossOff(flag,prime);
		prime = nextPrime(flag,prime);
	}

	printPrimes(flag);

	return 0;
}
	void std::vector<bool> sieveOfEratosthenes(int max)
	{
		std::vector<bool> flags(max + 1);

		init(flags);
		int prime = 2;

		while (prime <= sqrt(max))
		{
			   
			crossOff(flags, prime);

			
			prime = getNextPrime(flags, prime);
		}

		return flags;
	}
Ejemplo n.º 3
0
/// Cross-off the multiples of big sieving primes
/// from the sieve array.
///
void EratBig::crossOff(byte_t* sieve)
{
  // process the buckets in lists_[0] which hold the sieving primes
  // that have multiple(s) in the current segment
  while (lists_[0]->hasNext() || !lists_[0]->empty())
  {
    Bucket* bucket = lists_[0];
    lists_[0] = NULL;
    pushBucket(0);
    do {
      crossOff(sieve, bucket->begin(), bucket->end());
      Bucket* processed = bucket;
      bucket = bucket->next();
      processed->reset();
      moveBucket(*processed, stock_);
    } while (bucket);
  }

  // move the list corresponding to the next segment
  // i.e. lists_[1] to lists_[0] ...
  std::rotate(lists_.begin(), lists_.begin() + 1, lists_.end());
}
Ejemplo n.º 4
0
/// Cross-off the multiples of small sieving
/// primes from the sieve array.
///
void EratSmall::crossOff(byte_t* sieve, byte_t* sieveLimit)
{
  for (BucketIterator_t iter = buckets_.begin(); iter != buckets_.end(); ++iter)
    crossOff(sieve, sieveLimit, *iter);
}
Ejemplo n.º 5
0
/// Cross-off the multiples of medium sieving
/// primes from the sieve array.
///
void EratMedium::crossOff(byte_t* sieve, uint_t sieveSize)
{
  for (BucketIterator_t iter = buckets_.begin(); iter != buckets_.end(); ++iter)
    crossOff(sieve, sieveSize, *iter);
}