Submission

Status:

----------

Subtask/Task Score:

0/100

Score: 0

User: tHeNyXs

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

Language: cpp

Time: 0.038 second

Submitted On: 2026-03-06 15:29:09

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

const int MAX = 10000000;

vector<bool> prime(MAX,true);

string s;
int n;
int ans;

void dfs(int mask, int num){

    if(mask == (1<<n)-1){
        if(prime[num]) ans++;
        return;
    }

    for(int i=0;i<n;i++){

        if(mask & (1<<i)) continue;

        dfs(mask | (1<<i), num*10 + (s[i]-'0'));

    }
}

int main(){

    ios::sync_with_stdio(false);
    cin.tie(nullptr);

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

    for(int i=2;i*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--){

        cin >> s;

        ans = 0;

        dfs(0,0);

        cout << ans << "\n";
    }
}