Другие языки программирования и технологии

Используя функцию find_if найти первое простое число

Дан целочисленный вектор. Используя функцию find_if найти первое простое число (по определению 0 и 1 простыми числами не являются)
А в чем вопрос-то?
Сергей Марков
Сергей Марков
82 312
Лучший ответ
#include <iostream>
#include <vector>
#include <random>
#include <algorithm>
#include <utility>
#include <cstdlib>
#include <locale>
using namespace std;
bool is_prime(const long num) {
if (!num) return false;
bool prime;
if (num < 6 && (num <= 2 || num == 3 || num == 5)) prime = true;
else if (~num & 1 || 0 == num % 3 || 0 == num % 5) prime = false;
else {
int n;
for (n = 3; n * n <= num && num % n; n += 2) { ; }
prime = n * n > num;
}
return prime;
}
void fill(vector<long>& box, const size_t n, long a, long b) {
if (a > b) swap(a, b);
const uniform_int_distribution<long> uid(a, b);
random_device rd;
mt19937 gen(rd());
for (size_t i = 0; i < n; ++i) box.push_back(uid(gen));
}
void show(const vector<long>& box) {
for (const auto value : box) cout << ' ' << value;
cout.put('\n');
}
int main() {
const size_t n = 20;
const long a = 100;
const long b = 999;
vector<long> box;
fill(box, n, a, b);
show(box);
const auto prime = find_if(box.begin(), box.end(), is_prime);
setlocale(LC_CTYPE, "Russian");
if (prime != box.end()) cout << "Первое простое число: " << *prime;
else cout << "Вектор не содержит простых чисел!";
cout.put('\n');
system("pause");
}