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;
}