Submission
Status:
----------
Subtask/Task Score:
0/100
Score: 0
User: kavin8888
Problemset: การเรียงสับเปลี่ยน
Language: cpp
Time: 0.055 second
Submitted On: 2025-12-12 14:03:38
#include<bits/stdc++.h>
using namespace std;
#define spps1 ios::sync_with_stdio(false)
#define spps2 cin.tie(nullptr)
#define MAX_N 1000000
int m,n,cnt;
string d;
vector<bool> isPrime(MAX_N+1,true);
vector<bool> memo;
vector<bool> tmp;
void sieve() {
isPrime[0]=isPrime[1]=false;
for(int i=2;i*i<MAX_N;++i) {
if(isPrime[i]) {
for(int j=i*i;j<MAX_N;j+=i) {
isPrime[j]=false;
}
}
}
}
void dfs(string s) {
if(s.size()==n) {
if(s[0] != '0') {
int num=stoi(s);
if(!memo[num] && isPrime[num]) memo[num]=true,cnt++;
}
return;
}
for(int i=0;i<n;++i) {
if(!tmp[i]) tmp[i]=true,dfs(s+d[i]),tmp[i]=false;
}
}
int main()
{
ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
cin>>m>>n;
sieve();
for(int i=0;i<m;i++) {
cin>>d;
cnt=0;
tmp.assign(n,false);
memo.assign(MAX_N+1,false);
dfs("");
cout<<cnt<<'\n';
}
return 0;
}