Submission

Status:

PPPPP--P--

Subtask/Task Score:

60/100

Score: 60

User: qweqwe

Problemset: การเรียงสับเปลี่ยน

Language: cpp

Time: 0.027 second

Submitted On: 2025-10-15 22:53:25

#include <bits/stdc++.h>
#define speed cin.tie(0)->sync_with_stdio(0)
#define ll long long
#define pii pair<int,int>
#define LIM 1000001
using namespace std;

int dp[10]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};
vector<bool> primes(LIM+1,1);

void soe(){
	primes[0]=0;primes[1]=0;
	for (int i=2;i*i<LIM;i++){
		if (primes[i]){
			for (int j=i*i;j<LIM;j+=i){
				primes[j]=0;
			}
		}
	}
}

int main(){
	speed;
	soe();
	int m,n;cin >> m >> n;
	for (int i=0;i<m;i++){
		vector<int> v(n);
		int cnt=0;
		unordered_set<int> used;
		string s;cin >> s;
		for (int j=0;j<n;j++){
			v[j]=s[j]-'0';
		}sort(v.begin(),v.end());
		do{
			int t=0;
			for (int j=0;j<n;j++){
				t+=v[j]*dp[n-j-1];
			}
			if (!used.count(t)){
				cnt+=primes[t];used.insert(t);
			}
		}while (next_permutation(v.begin(),v.end()));
		cout << cnt << "\n";
	}
	return 0;
}