Submission
Status:
PPPPP--P--
Subtask/Task Score:
60/100
Score: 60
User: Ecir
Problemset: การเรียงสับเปลี่ยน
Language: cpp
Time: 0.067 second
Submitted On: 2025-10-04 08:47:41
#include <bits/stdc++.h>
using namespace std;
int n,nn;
bool p[1000009];
int cnt=0;
bool c[1000009];
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<=1000005;i++){
if(p[i]==0){
for(int j=i*i;j<=1000005;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;
}