Как сделать алгоритм более быстрым и эффективным?

Есть две последовательности чисел:

  1. A[0], A[1], ... , A[n].
  2. B[0], B[1], ... , B[m]. Нужно проделать следующие операции с последовательностью A:
  3. Удалить элементы, индексы которых кратны B[0].
  4. Из оставшихся элементов удалить те, индексы которых кратны B[1].
  5. Повторите этот процесс до B[m].
  6. Вывести оставшиеся элементы.
#include <iostream>
#include <vector>
#include<iomanip>
using namespace std;
vector <int> divisible_func(vector <int>& a, vector <int>& b) {
    vector <int> c;
    for (size_t i = 0; i < b.size(); i++) {
        for (size_t j = 0; j < a.size(); j++) {
            if (j % b[i] != 0) {
                c.push_back(a[j]);
            }
        }
        a = c;
        c.resize(0);
    }
    a.push_back(-1);
    return a;
}
int main()
{
    int elem1;
    int elem2;
    vector <int> a;
    vector <int> b;
    vector <int> count;
    while (cin >> elem1) {
        if (elem1 == -1) break;
        a.push_back(elem1);
    }
    while (cin >> elem2) {
        if (elem2 == -1) break;
        b.push_back(elem2);
    }
    count = divisible_func(a, b);
    for (size_t i = 0; i < count.size(); i++) {
        cout << count[i] << setw(count.size());
    }
    
    return 0;
}

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