Submission
Status:
PPPPPxxPxx
Subtask/Task Score:
60/100
Score: 60
User: krittaphot
Problemset: การเรียงสับเปลี่ยน
Language: cpp
Time: 0.019 second
Submitted On: 2026-03-04 15:29:38
#include <bits/stdc++.h>
using namespace std;
static const int LIM = 1000000;
vector<bool> prime(LIM+1, true);
vector<char> num;
vector<char> used;
vector<char> seen;
void seive() {
prime[0]=prime[1]=false;
for(int i=2;i*i<=LIM;i++){
if(prime[i]){
for(int j=i*i;j<=LIM;j+=i) prime[j]=false;
}
}
}
int n;
int ans;
void dfs(int depth, int value){
if(depth==n){
if(prime[value] && !seen[value]){
seen[value]=1;
ans++;
}
return;
}
for(int i=0;i<n;i++){
if(used[i]) continue;
if(i>0 && num[i]==num[i-1] && !used[i-1]) continue;
used[i]=1;
dfs(depth+1, value*10 + (num[i]-'0'));
used[i]=0;
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int m;
cin >> m >> n;
seive();
while(m--){
string s; cin >> s;
num.assign(s.begin(), s.end());
sort(num.begin(), num.end());
used.assign(n, 0);
seen.assign(LIM+1, 0);
ans=0;
dfs(0, 0);
cout << ans << "\n";
}
}