как получить число простых чисел от каждого элемента в массиве C++?
мой код дает все простие числа массива но мне нужно найти количество простых чисел каждого отдельно взятого елемента масива...
Примеры:
Входные данные
5 --» 1 2 3 4 5
Результат работы
0 0 1 2 2
Входные данные
11 --» 2 3 5 7 11 13 17 19 23 29 31
Результат работы
0 1 2 3 4 5 6 7 8 9 10
```
#include <iostream>
int main()
{
int n;
std::cin >> n;
int arr[100];
for (int i = 0; i < n; i++)
{
std::cin >> arr[i];
}
std::cout << "N of primes:";
for (int i = 0; i < n ; i++)
{
for (int j = 2; j <= arr[i] / 2; j++)
{
if (arr[i] % j == 0 && arr[i] != j)
{
arr[i] = 0;
break;
}
}
if (arr[i] != 0)
{
std::cout << arr[i] << " ";
}
}
}
```
я начинающий в C++ поэтому мне нужны простые решение задачи
спасибо заранее!
Ответы (2 шт):
Автор решения: Nosorog
→ Ссылка
Я добавил в код комментарии, чтобы было понятнее.
#include <iostream>
int main(){
// заведем переменную, в которой будем хранить кол-во простых чисел
long long counter = 0;
long long n; std::cin >> n;
// считаем количество вводимых чисел
for(long long i = 0; i < n; ++i){
// будем считывать N простых чисел и проверять их на простоту. Переменна flag нужна как переключатель - простое число или нет
bool flag = true;
long long tmp; std::cin >> tmp;
// выведем счетчик
std::cout << counter << " ";
// проверка на простоту
if(tmp == 1) continue; // 1 - не простое число, уходим на новую итерацию
for(long long d = 2; d * d <= tmp; d++){
if(tmp % d == 0) flag = false; // если число не простое, не будем увеличиваь счетчик
}
if(flag) counter++;
}
}
Автор решения: Vardan
→ Ссылка
```
#include <iostream>
int main() {
unsigned int n, count = 0, num;
std::cin >> n;
int arr[100];
for (int i = 0; i < n; ++i) {
std::cin >> arr[i];
}
for (int i = 0; i < n; ++i) {
std::cout << count << " ";
num = arr[i];
if (num == 2)
count++;
if (num < 2 || num % 2 == 0)
continue;
int j;
for (j = 2; j < num; j++)
if (num % j == 0)
break;
if (j * j > num)
count++;
}
}
```
как решить проблему когда вводятся 10 чисел например --» 3 5 7 11 13 17 19 23 29 31 Правильный ответ был 1 2 3 4 5 6 7 8 9 10
сейчас программа дает ответ 0 1 2 3 4 5 6 7 8 9