Submission

Status:

PPPPP--P--

Subtask/Task Score:

60/100

Score: 60

User: Ecir

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

Language: cpp

Time: 0.068 second

Submitted On: 2025-10-04 08:34:11

#include <bits/stdc++.h>
using namespace std;
int n,nn;
bool p[1000009];
int cnt=0;
bool c[1000000];
queue<int> q;
int cnv(string s){
    int ans=0;
    for(auto e:s){
        ans*=10;
        ans+=int(e-'0');
    }
    return ans;
}
void build(string s,string w,bool b[]){
    if(w.size()==nn){
        // cout << cnv(w) << '\n';
        // return cnv(w);
        if(c[cnv(w)]==1) return;
        c[cnv(w)]=1;
        q.push(cnv(w));
        if(p[cnv(w)]==0){
            cnt++;
        }
        return ;
    }
    for(int i=0;i<nn;i++){
        if(b[i]==1) continue;
        w+=s[i];
        b[i]=1;
        build(s,w,b);
        w.pop_back();
        b[i]=0;
    }

}
int main(){
    ios::sync_with_stdio(0);cin.tie(0);
    cin >> n >> nn;
    p[0]=1;
    p[1]=1;
    for(int i=2;i*i<=1000000;i++){
        if(p[i]==0){
            for(int j=i*i;j<=1000000;j+=i) p[j]=1;
        }
    }
    // for(int i=1;i<=100;i++){
    //     if(p[i]==0) cout << i <<'\n';
    // }
    while(n--){
        string s;cin >> s;
        string w="";
        cnt=0;
        bool b[10]={};
        build(s,w,b);
        while(!q.empty()){
            int u=q.front();q.pop();
            c[u]=0;
        }
        cout << cnt << '\n';
    }
    return 0;
}