Submission

Status:
PPPPPPPPPP

Score: 100

User: admin

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

Language: cpp

Time: 0.035 second

Submitted On: 2025-03-31 02:12:30

#include <iostream>
#include <string>
#include <vector>
using namespace std;

vector<bool> chkp(10000000, true);
char st[8];
int n, m, sum, range[9] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000};

int custom_stoi(string st)
{
    int digit = 1, sum = 0;
    for (int i = st.length() - 1; i >= 0; i--)
    {
        sum += digit * (st[i] - '0');
        digit *= 10;
    }
    return sum;
}

void think(int deep)
{
    char temp;
    int i, j, p;
    vector<bool> chk(255, true);
    if (deep == n)
    {
        p = custom_stoi(st); // Change here
        if (chkp[p]) sum++;
    }
    else
    {
        for (i = deep; i < n; i++)
        {
            if (chk[st[deep]]) think(deep + 1);
            temp = st[deep];
            chk[temp] = false;
            for (j = deep; j < n - 1; j++) st[j] = st[j + 1];
            st[n - 1] = temp;
        }
    }
}

void init_var()
{
    for (int i = 2; i < range[n]; i++)
        if (chkp[i])
            for (int j = 2 * i; j < range[n]; j = j + i) chkp[j] = false;
}

int main()
{
    cin >> m >> n;
    init_var();
    for (int i = 0; i < m; i++)
    {
        sum = 0;
        cin >> st;
        think(0);
        cout << sum << endl;
    }
    return 0;
}