С одного масива скласть два

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std; 

int main() {
    system("chcp 1251>null");
    srand(time(NULL));
    int n;
    cin >> n;
    int*a = new int [n];
    int k=0, z=0;
    for (int i = 1; i < n+1; i++) {
        a[i] = -500 + rand() % 501;
        cout << a[i] << " ";
        if (a[i] % i == 0) {
            k++;
        }
        else { z++; }
    }
    cout << endl;
    int *b= new int[k];
    int* c = new int[z];
    for (int i = 1; i < n+1; i++) {
        if (a[i] % i == 0) {
            b[i]==a[i];
        }
        else { c[i] = a[i]; }
    }
    for (int i = 0; i < k; i++) {
        cout << b[i] << " ";
    }
    cout << endl;
    for (int i = 0; i < z; i++) {
        cout << c[i] << " ";
    }
    cout << endl;
    system("pause>null");
    return 0;
}

Дано один масив,нужно два масива в первом все простие числа ,в втором нет,что здесь не верно?


Ответы (1 шт):

Автор решения: Павел Ериков

Вообще ваш код не делает, того что вам нужно, то есть a[i] % i == 0 не значит, что a[i] простое число.

Что за промежуток у цикла?

for(int i = 1; i < n+1; i++)

У вас массив a размером n, происходит выход за пределы массива!

Нужно идти от 0, до i < n. А внутри цикла, где происходит a[i] % i пишите a[i] % (i + 1), чтобы не происходило деления на 0.

Далее вы пишите:

b[i] = a[i] //аналогично с c[i] = a[i]

Но размер b или c не равен n, то есть опять выход за пределы массива.

Нужно сделать две переменные, которые будут отвечать за индекс следующего элемента в массиве для вставки.

int i1 = 0, i2 = 0;

И писать:

b[i1++] = a[i]; //c[i2++] = a[i]

И теперь ваша программа запуститься, но будет работать не так как вам нужно. Потому что проверки на простоту я у вас не вижу.

Спонсор ответа: Дебаггер. Лучшее что придумало человечество для отладки программ.

→ Ссылка