Submission

Status:

PPPPPxxPxx

Subtask/Task Score:

60/100

Score: 60

User: nga12345

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

Language: cpp

Time: 0.007 second

Submitted On: 2025-10-11 09:53:25

#include <iostream>
#include <vector>
#include <set>
#include <cmath>
#include <algorithm>

using namespace std;

int max_n;
vector<bool> is_prime;
vector<int> primes;

bool isPrime(int x) {
    return x >= 2 && x <= max_n && is_prime[x];
}

int countUniquePrimePermutations(const string& digits) {
    set<int> unique_numbers;
    string s = digits;
    sort(s.begin(), s.end());
    do {
        int number = stoi(s);
        unique_numbers.insert(number);
    } while (next_permutation(s.begin(), s.end()));

    int count = 0;
    for (int num : unique_numbers) {
        if (isPrime(num)) ++count;
    }
    return count;
}

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

    int num_cases, length;
    cin >> num_cases;
    cin >> length;

    max_n = pow(10, length) - 1;
    is_prime.resize(max_n + 1, true);

    is_prime[0] = is_prime[1] = false;
    int limit = sqrt(max_n);
    for (int i = 2; i <= limit; ++i) {
        if (!is_prime[i]) continue;
        for (int j = i * i; j <= max_n; j += i) {
            is_prime[j] = false;
        }
    }
    for (int i = 2; i <= max_n; ++i) {
        if (is_prime[i]) {
            primes.push_back(i);
        };
    }

    while (num_cases--) {
        string input;
        cin >> input;
        cout << countUniquePrimePermutations(input) << '\n';
    }

    return 0;
}