Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define max 9733
- vector<bool> is_prime(max + 1, true);
- vector<int> primes, myPrimes, ans;
- stack<int> mainStack;
- void init(int n);
- int main() {
- freopen("input.txt", "r", stdin);
- //freopen("output.txt", "w", stdout);
- ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
- int n, q; cin >> n >> q;
- for (int i = 0; i < n; ++i) {
- int val; cin >> val;
- mainStack.push(val);
- }
- init(q);
- for (int i = 0; i < q && !mainStack.empty(); ++i) {
- stack<int> pD, inV;
- while (!mainStack.empty()) {
- int val = mainStack.top();
- if (val != 1 && val % myPrimes[i] == 0) pD.push(val);
- else inV.push(val);
- mainStack.pop();
- }
- while (!pD.empty()) {
- ans.push_back(pD.top());
- pD.pop();
- }
- mainStack = inV;
- }
- for (int i = 0; i < ans.size(); ++i) cout << ans[i] << endl;
- while (!mainStack.empty()) {
- cout << mainStack.top() << endl;
- mainStack.pop();
- }
- return 0;
- }
- void init(int n) {
- is_prime[0] = is_prime[1] = false;
- for (int i = 2; i * i <= max; ++i) {
- if (is_prime[i]) {
- for (int j = i * i; j <= max; j += i) {
- is_prime[j] = false;
- }
- }
- }
- for (int i = 2; i <= max; ++i) if (is_prime[i]) primes.emplace_back(i);
- for (int i = 0; i < n; ++i) myPrimes.emplace_back(primes[i]);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement