/* Создает и возвращает вектор со всеми натуральными простыми числами [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; }
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'; }