Submission
Status:
PPPPP--P--
Subtask/Task Score:
60/100
Score: 60
User: Imorange
Problemset: การเรียงสับเปลี่ยน
Language: cpp
Time: 0.025 second
Submitted On: 2026-03-04 19:35:36
#include <bits/stdc++.h>
using namespace std;
const int LIM = 10000000;
bool prime[LIM + 1];
char num[8];
bool used[8];
int n;
int ans;
void sieve() {
for(int i = 0; i <= LIM; i++) prime[i] = true;
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;
}
}
}
void dfs(int depth, int value){
if(depth == n){
if(prime[value]) 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] = true;
dfs(depth + 1, value * 10 + (num[i] - '0'));
used[i] = false;
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int m;
cin >> m >> n;
sieve();
while(m--){
cin >> num;
sort(num, num + n);
for(int i = 0; i < n; i++)
used[i] = false;
ans = 0;
dfs(0, 0);
cout << ans << "\n";
}
}