示例#1
0
/*
Создает и возвращает вектор со всеми натуральными простыми числами 
[lower, max] - от lower до max
lower -  нижняя граница включительно
max - верхняя граница включительно
*/
vector<int> primes(int lower, int max){
	
	vector<char> sieve = create_sieve_of_eratosthenes(lower, max);
	
	// посчитаем количество простых чисел в Решете
	// Используем это число позже для оптимизации создания итогового вектора
	// со списком простых чисел, чтобы избежать
	// лишней аллокации памяти c vector.push_back()
	int amount = 0;
	for(int i = 0; i < sieve.size(); ++i){ 
		if(is_prime(sieve[i])) { ++amount; }
	}
	
	// создадим вектор для итоговых значений
	vector<int> prime_numbers(amount);
	// заполним итоговый вектор простыми числами из Решета
	int next = 0;
	for(int i = 0; i < sieve.size(); ++i){
		if(is_prime(sieve[i])){
			prime_numbers[next] = i + lower;
			++next;
		}
	}
	
	return prime_numbers;
	
}
示例#2
0
int main()
{
  std::vector<bool> prime_numbers(1000000,true);
  prime_soe(prime_numbers);

  for(unsigned int i = 2; i < 100; ++i)
    {
      if(prime_numbers[i] == true)
	{
	  if(is_prime(i))
	    {
	      std::cout << i << " is a prime \n";
	    }
	  else
	    {
	      std::cout << i << " is not a prime \n";
	    }
	}
    }
  // prime_soe(prime_numbers);
  // // print_primes(prime_numbers);
  // int largest_left_trunc_prime = 0;
  // int largest_right_trunc_prime = 0;
  // for(unsigned int i = 2; i < prime_numbers.size();++i)
  //   {
  //     if(prime_numbers[i] == true)
  // 	{
  // 	  if(is_left_trunc_prime(i))
  // 	    {
  // 	      largest_left_trunc_prime = i;
  // 	    }
  // 	  if(is_right_trunc_prime(i))
  // 	    {
  // 	      largest_right_trunc_prime = i;
  // 	    }
  // 	}
  //   }
  // std::cout << "largest left trunc prime: " << largest_left_trunc_prime << '\n';
  // std::cout << "largest right trunc prime: " << largest_right_trunc_prime << '\n';
}