Submission

Status:

PPPPPxxPxx

Subtask/Task Score:

60/100

Score: 60

User: Bestzu

Problemset: การเรียงสับเปลี่ยน

Language: cpp

Time: 0.051 second

Submitted On: 2025-10-07 11:37:58

#include <bits/stdc++.h>
#define endl '\n'
using namespace std;

const int N = 1e7;
vector<bool> is_prime(N + 1, true);
vector<int> prime_num;

void sieve() {
    is_prime[0] = false;
    is_prime[1] = false;
    int lim = (int)floor(sqrt((double)N));
    for (int i = 2; i <= lim; i++) {
        if (!is_prime[i]) continue;
        long long start = 1LL * i * i;
        for (long long j = start; j <= N; j += i) {
            is_prime[(int)j] = false;
        }
    }
    for (int i = 2; i <= N; i++)
        if (is_prime[i]) prime_num.push_back(i);
}

bool isPrime(int x) {
    if (x < 2 || x > N) return false;
    return is_prime[x];
}

int main() {
    ios::sync_with_stdio(false); cin.tie(0);

    sieve();

    int q; cin >> q;
    int dumb; cin >> dumb;
    while (q--) {
        string s; cin >> s;
        sort(s.begin(), s.end());
        int cnt = 0;
        do {
            int x = stoi(s);
            if (isPrime(x)) cnt++;
        } while (next_permutation(s.begin(), s.end()));
        cout << cnt << endl;
    }

    return 0;
}