Submission
Status:
----------
Subtask/Task Score:
0/100
Score: 0
User: Brabra475
Problemset: การเรียงสับเปลี่ยน
Language: cpp
Time: 0.019 second
Submitted On: 2026-03-11 23:04:29
#include<bits/stdc++.h>
using namespace std;
vector<bool> use;
int n,m;
vector<int> ans;
vector<int> make;
bool check(int n){
if(n<2)return false;
if(n==2)return true;
if(n%2==0)return false;
for(int i =3;i*i<n;i+=2){
if(n%i==0)return false;
}
return true;
}
int sum=0;
int ten=0;
void build(vector<int> &num,int l){
if(make.size()==m){
sum=0;
ten=1;
for(int i=0;i<m;i++){
sum+=make[i]*(ten);
ten*=10;
}
if(check(sum)==false){
return;
}
ans[l]+=1;
return;
}
for(int i=0;i<m;i++){
if(use[i]==true){
continue;
}
make.push_back(num[i]);
use[i]=true;
build(num,l);
make.pop_back();
use[i]=false;
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin>>n>>m;
vector<vector<int>> num(n);
for(int i =0;i<n;i++){
int get;
cin>>get;
int pii=1;
int a;
for(int j = 0; j < m; j++) {
num[i].push_back(get % 10);
get /= 10;
}
}
ans.resize(n,0);
for(int i =0;i<n;i++){
use.assign(m,false);
make.clear();
build(num[i],i);
}
for(auto x: ans){
cout<<x<<"\n";
}
}