Submission

Status:

PPPPP--P--

Subtask/Task Score:

60/100

Score: 60

User: tHeNyXs

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

Language: cpp

Time: 0.083 second

Submitted On: 2026-03-06 15:19:26

#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9+7;
const int MAX = 1e6;

vector<bool> prime(MAX, true);
int n;
int cnt;

unordered_map<char, int> um;

int to_digit(string a) {
    int sum = 0;
    for (int i = a.length()-1; i >= 0; --i) {
        sum += int(a[i] - '0') * pow(10, n-i-1);
    }
    return sum;
}

void findAns(string num) {
    if (num.size() == n) {
        if (prime[to_digit(num)]) cnt++;
        // cout << num << '\n';
        return;
    }

    for (int i = 0; i <= 9; ++i) {
        if (um['0'+i]) {
            um['0'+i]--;
            string temp = num;
            temp += char('0'+i);
            findAns(temp);
            um['0'+i]++;
        }
    }
}

int main() {
    ios_base::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 ans; cin >> ans;
        um.clear();
        cnt = 0;
        for (int i = 0; i < ans.length(); ++i) um[ans[i]]++;
        findAns("");
        cout << cnt << '\n';
    }
    

    return 0;
}