Submission

Status:

PPPPPxxPxx

Subtask/Task Score:

60/100

Score: 60

User: iij

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

Language: cpp

Time: 0.005 second

Submitted On: 2025-10-22 20:53:43

#include <iostream>
#include <algorithm>
#include <set>

using namespace std;
int ans[1025], mx[7] = {0, 0, 100, 1000, 10000, 100000, 1000000};
bool isNotPrime[1000000];

void permRec(string &s, int idx, int &sum, set<int> &dupe) {
    if (idx == s.length()) {
        int p = stoi(s);
        if (!isNotPrime[p] && dupe.find(p) == dupe.end()) {
            sum++;
            dupe.insert(p);
        }
        return;
    }

    for (int i = idx; i < s.length(); i++) {
        swap(s[idx], s[i]);
        permRec(s, idx+1, sum, dupe);
        swap(s[idx], s[i]);
    }
}

int main() {
    isNotPrime[0] = isNotPrime[1] = 1;
    
    int n, m;
    cin >> n >> m;

    for (int i = 2; i*i <= mx[m]; i++) {
        if (!isNotPrime[i])
        for (int j = i*i; j <= mx[m]; j+=i) {
            isNotPrime[j] = 1;
        }
    }

    for (int i = 0; i < n; i++) {
        string s;
        cin >> s;
        int c = 0;
        set<int> d;
        permRec(s, 0, c, d);
        ans[i] = c;
    }

    for (int i = 0; i < n; i++) cout << ans[i] << "\n";
}