Submission

Status:

PPPPP--P--

Subtask/Task Score:

60/100

Score: 60

User: tHeNyXs

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

Language: cpp

Time: 0.056 second

Submitted On: 2026-03-06 15:23:03

#include <bits/stdc++.h>
using namespace std;

const int MAX = 1e7;

vector<bool> prime(MAX, true);

int n;
int cnt;
int freq[10];

int to_digit(string &a) {
    int sum = 0;
    for (char c : a)
        sum = sum*10 + (c-'0');
    return sum;
}

void findAns(string &num) {

    if (num.size() == n) {
        if (prime[to_digit(num)]) cnt++;
        return;
    }

    for (int i = 0; i <= 9; ++i) {
        if (freq[i]) {
            freq[i]--;

            num.push_back('0'+i);
            findAns(num);
            num.pop_back();

            freq[i]++;
        }
    }
}

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

    prime[0] = prime[1] = false;

    for (int i = 2; i < MAX; ++i)
        if (prime[i])
            for (int j = i+i; j < MAX; j += i)
                prime[j] = false;

    int q; 
    cin >> q >> n;

    while (q--) {

        string s;
        cin >> s;

        memset(freq,0,sizeof(freq));

        for (char c : s)
            freq[c-'0']++;

        cnt = 0;

        string cur="";
        findAns(cur);

        cout << cnt << '\n';
    }
}