Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
2 / 2 / 0
Регистрация: 25.06.2020
Сообщений: 84
1

В массиве найти простые числа меньшие заданного

25.06.2020, 23:47. Показов 3798. Ответов 12

Author24 — интернет-сервис помощи студентам
мне нужно написать этот код без #include <vector> и без остальных других функций... можно решить задачу написав все в
int main() {

}
я начинающий в C++ поэтому мне нужны простые решение задачи

спасибо заранее!



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
   #include <iostream>
    #include <vector>
 
         using namespace std;
         bool is_prime(long long n){
         if(n == 1) return false;
         for(int i = 2; i * i <= n; i++){
         if(n % i == 0){
            return false;
            }
         }
            return true;
         }
            int main(){
            long long counter = 0;
            vector<long long> arr;
            long long n; cin >> n;
            for(long long i = 0; i < n; ++i){
            long long tmp; cin >> tmp;
            arr.push_back(tmp);
         }
            for(auto i : arr){
            cout << counter << " ";
             if(is_prime(i)){
              counter++;
          }
          }
          }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2020, 23:47
Ответы с готовыми решениями:

Найти все натуральные числа, меньшие заданного числа и взаимно простые с ним
Дано натуральное число n. Необходимо получить все натуральные числа, меньшие nn и взаимно простые с...

Найти все простые числа меньшие заданного числа
Помогите Пожалуйста! Простое число это число которое делится только на 1 и на самого себя....

Вывести все простые числа, меньшие заданного n, включительно
Простое число Помогите Пожалуйста! Простое число это число которое делится только на 1 и...

Распечатать все простые сдвоенные числа меньшие заданного
Здравствуйте! Помогите написать программу Если p и q - простые числа и q = p+2, то они называются...

12
440 / 283 / 183
Регистрация: 23.06.2018
Сообщений: 651
26.06.2020, 00:46 2
Без крови не выйдет, придётся использовать new/delete.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
using namespace std;
 
bool is_prime(long long n) {
    if (n == 2) return true;
    if (n < 2 || n % 2 == 0) return false;
    for (long long i = 3; i * i <= n; i += 2) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
}
 
int main() {
    long long counter = 0, n, tmp, *arr;
    cin >> n;
    arr = new long long[n];
    for (long long i = 0; i < n; ++i) {
        cin >> tmp;
        arr[i] = tmp;
    }
    for (long long i = 0; i < n; ++i) {
        cout << counter << " ";
        if (is_prime(i)) {
            counter++;
        }
    }
    delete[] arr;
}
Ну либо, если ваше задание позволяет вам выкинуть вывод количества простых чисел на каждом шаге, оставив его только в конце, можно просто удалить массив и хранить только текущее число.
1
2 / 2 / 0
Регистрация: 25.06.2020
Сообщений: 84
26.06.2020, 00:53  [ТС] 3
невозможно все написать в int main () и без функции bool is_prime ???
0
440 / 283 / 183
Регистрация: 23.06.2018
Сообщений: 651
26.06.2020, 01:11 4
Лучший ответ Сообщение было отмечено Vardan как решение

Решение

Ну, вы можете вставить свой код проверки прямо в цикл... Но красиво я это не сделаю. Зато я обнаружил, что случайно вставил i вместо arr[i] в вызов функции. Тут исправил вроде бы.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
using namespace std;
 
int main() {
    long long counter = 0, n, i, j, t, *arr;
    cin >> n;
    arr = new long long[n];
    for (i = 0; i < n; ++i) {
        cin >> t;
        arr[i] = t;
    }
    for (i = 0; i < n; ++i) {
        cout << counter << " ";
 
        t = arr[i];
        if (t == 2) counter++;
        if (t < 2 || t % 2 == 0) continue;
        for (j = 3; j * j <= t; j += 2)
            if (t % j == 0)
                break;
        if (j*j > t)
            counter++;
    }
    delete[] arr;
}
1
2 / 2 / 0
Регистрация: 25.06.2020
Сообщений: 84
26.06.2020, 01:25  [ТС] 5
спасибо вам огромное! если прошу объясните мне как работает этот код???
0
440 / 283 / 183
Регистрация: 23.06.2018
Сообщений: 651
26.06.2020, 01:58 6
Я... Плохо объясняю. Если это вам как-то поможет, то вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
using namespace std;
 
int main() {
    long long counter = 0, n, i, j, t, *arr;
    cin >> n; // считать кол-во вводимых чисел
    arr = new long long[n]; // создать массив чтобы хранить все эти числа
    for (i = 0; i < n; ++i) { // n раз
        cin >> t; // считать число во временную переменную
        arr[i] = t; // записать число в масив
    }
    for (i = 0; i < n; ++i) { // n раз
        cout << counter << " "; // вывести сколько найдено простых чисел
 
        t = arr[i]; // копирование числа из массива в переменную для удобства
        if (t == 2) counter++; // если число равно двум - увеличить счётчик простых чисел
        if (t < 2 || t % 2 == 0) continue; // если число меньше двух или делится на два - переход на следующий шаг цикла
        // Проверка числа на делимость числами 3, 5, 7, ..., sqrt(t)
        for (j = 3; j * j <= t; j += 2)
            if (t % j == 0)
                break; // если делится - прерывание цикла
        if (j*j > t) // если цикл выше дошёл до конца
            counter++; // увеличить счётчик простых чисел
    }
    delete[] arr; // удалить массив с хранимыми числами
}
1
2 / 2 / 0
Регистрация: 25.06.2020
Сообщений: 84
26.06.2020, 02:03  [ТС] 7
как решить проблему когда вводятся 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
0
440 / 283 / 183
Регистрация: 23.06.2018
Сообщений: 651
26.06.2020, 02:31 8
А... Вы всё-таки неправильно поставили вывод в оригинальном коде.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
using namespace std;
 
int main() {
    long long counter = 0, n, i, j, t, *arr;
    cin >> n;                 // считать кол-во вводимых чисел
    arr = new long long[n];   // создать массив чтобы хранить все эти числа
 
    // Считывание чисел
    for (i = 0; i < n; ++i) { // n раз
        cin >> t; // считать число во временную переменную
        arr[i] = t; // записать число в масив
    }
 
    // Проверка чисел на простоту
    for (i = 0; i < n; ++i) { // n раз
        t = arr[i]; // копирование числа из массива в переменную для удобства
        if (t == 2) // Если число равно двум
            counter++; // Увеличить счётчик
        else if (t > 2 || t % 2) // Иначе, если число больше двух и не делится на два
        {
            // Проверка числа на делимость числами 3, 5, 7, ..., sqrt(t)
            for (j = 3; j * j <= t; j += 2)
                if (t % j == 0)
                    break; // если делится - прерывание цикла
            if (j * j > t) // если цикл выше дошёл до конца
                counter++; // увеличить счётчик простых чисел
        }
        
        cout << counter << " "; // вывести сколько найдено простых чисел
    }
    delete[] arr; // удалить массив с хранимыми числами
}
0
2 / 2 / 0
Регистрация: 25.06.2020
Сообщений: 84
26.06.2020, 02:38  [ТС] 9
спасибо вам очень за помощь!!!
результаты программы должны быть эти

Примеры
Входные данные
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
Входные данные
10 3 5 7 11 13 17 19 23 29 31
Результат работы
1 2 3 4 5 6 7 8 9 10
0
440 / 283 / 183
Регистрация: 23.06.2018
Сообщений: 651
26.06.2020, 04:05 10
Так, мне уже стыдно за такие ошибки становится.. 20-я строка, if (t > 2 && t % 2)
А вот полный набор тестовых данных я что-то не понял... Что у вас по заданию было? Я тут вижу вывод в разные моменты в зависимости от кол-ва элементов... Но что на это влияет? Чётность? Или тоже простота?
0
2 / 2 / 0
Регистрация: 25.06.2020
Сообщений: 84
26.06.2020, 08:02  [ТС] 11
мне нужно было найти количество простых чисел каждого отдельно взятого елемента масива... (простые числа меньше данного числа)

и Примеры работы программы...

Входные данные
Input: 5 //(array size)
1 2 3 4 5
Результат работы
Output: 0 0 1 2 2
Входные данные
Input:11
2 3 5 7 11 13 17 19 23 29 31
Результат работы
Output: 0 1 2 3 4 5 6 7 8 9 10
Входные данные
Input:10
3 5 7 11 13 17 19 23 29 31
Результат работы
Output : 1 2 3 4 5 6 7 8 9 10
0
440 / 283 / 183
Регистрация: 23.06.2018
Сообщений: 651
26.06.2020, 10:17 12
Лучший ответ Сообщение было отмечено Vardan как решение

Решение

Да вы шутите... Поиск кол-ва простых чисел меньше данного числа это же другое.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
using namespace std;
 
int main() {
    long long k, n, i, j, t, max, *arr, *primes;
    
    cin >> n;
    arr = new long long[n];
    max = 1;
 
    // Считывание чисел и поиск максимального
    for (i = 0; i < n; ++i) {
        cin >> t;
        arr[i] = t;
        if (t > max)
            max = t;
    }
    
    // Инициализация массива простых чисел
    primes = new long long[max/2+1];
    primes[0] = 2;
    k = 1;
    
    // Поиск всех простых чисел не меньше максимального считанного
    for (i = 3; i <= max; i+= 2) {
        // Проверка делимости на все найденные простые числа
        for (j = 0; j < k; j++)
            if (i % primes[j] == 0)
                break;
        // Добавление в массив, если число простое
        if (j == k)
            primes[k++] = i;
    }
 
    // Вывод ответа
    for (i = 0; i < n; ++i) {
        // Подсчёт кол-ва простых чисел меньше текущего числа
        for (j = 0; j < k && arr[i] > primes[j]; j++);
        
        cout << j << " ";
    }
    
    // Освобождение динамической памяти
    delete[] arr;
    delete[] primes;
}
0
2 / 2 / 0
Регистрация: 25.06.2020
Сообщений: 84
26.06.2020, 14:34  [ТС] 13
Bleach163, спасибо вам огромное! Вы мне очень очень помогли!!! Спасибо
0
26.06.2020, 14:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.06.2020, 14:34
Помогаю со студенческими работами здесь

В одномерном массиве, состоящем из N натуральных чисел найти все простые числа из заданного интервала [a,b]
В одномерном массиве, состоящем из N натуральных чисел найти все простые числа из заданного...

Найти простые числа, меньшие n
дано: введить число n, найти все простые числа &lt;n помогите ....! пожалуйста

В массиве найти элементы, меньшие заданного числа
Дан массив, упорядоченный по убыванию. Если в нем есть элементы, меньшие заданного числа А, то...

В заданном массиве найти все числа, меньшие заданного А
В заданном массиве найти все числа, меньшие заданного А, и переместить их в начало массива в той же...

В заданном массиве найти все числа, меньшие заданного А
В заданном массиве найти все числа, меньшие заданного А, и переместить их в начало массива в той же...

В одномерном массиве найти все элементы, меньшие заранее заданного числа
В одномерном массиве найти все элементы, меньшие заранее заданного числа, и из них сформировать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru