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