witam mam problem z programem nie jestem programistom i muszę wykonać program na zaliczenie na studiach. Z pomocą brata udało nam się coś zrobić ale nie działa jest możliwość zrobienia tego używając prostszych komend ?
Program polega na usunięciu wszystkich potęg liczb pierwszych z n elementowego zbioru.
Z góry dziękuję za pomoc osób które znają się na tym lepiej.
Pozdrawiam.
#include <iostream>
#include <math.h>
#include <vector>
#include <algorithm>
int main() {
int a;
std::cout << "Podaj liczbę naturalną: ";
std::cin >> a;
std::vector<int> zbior;
for (int i = 0; i < a; ++i) {
zbior.push_back(i);
}
std::vector<int> pierwsze;
pierwsze.push_back(2);
pierwsze.push_back(3);
for (int i = 2; i < a; i++) {
for (int j = 2; j*j<=i; j++) {
if (i % j == 0)
break;
else if (j+1 > sqrt(i)) {
pierwsze.push_back(i);
}
}
}
int base;
int acc;
std::vector<int> potegi;
potegi.push_back(1); // kazda liczba podniesiona do zerowej potegi to 1
for (int i = 0; i < pierwsze.size(); i++) {
potegi.push_back(pierwsze[i]);
base = pierwsze[i];
acc = pierwsze[i];
while (true) {
if (base * acc < a) {
potegi.push_back(base * acc);
acc = base * acc;
} else {
break;
}
}
}
std::cout << "Zbiór: " << std::endl;
for (int i = 0; i < zbior.size(); ++i) {
std::cout << i << " ";
}
std::cout << std::endl;
for (int i = 0; i < a; i++) {
if (std::find(potegi.begin(), potegi.end(), i) != potegi.end()) {
zbior.erase(std::remove(zbior.begin(), zbior.end(), i), zbior.end());
}
}
std::cout << "Zbiór po usunięciu potęg liczb pierwszych: " << std::endl;
for (auto x: zbior) { std::cout << x << " "; }
std::cout << std::endl;
return 0;
}