Submission

Status:

PPPPPxxPxx

Subtask/Task Score:

60/100

Score: 60

User: tull

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

Language: cpp

Time: 0.004 second

Submitted On: 2026-04-25 22:39:01

#pragma GCC optimize("O3,unroll-loops")
#include <bits/stdc++.h>
using namespace std;
//#define int long long
#define all(A) A.begin(),A.end()
const int N=1e3+10;
int prime[N];
int fp(int n){
    if(n==1)return 0;
    if(n==2 or n==3 or n==5 or n==7)return 1;
    if(n%2==0 or n%5==0)return 0;
    for(int i=3;i*i<=n;i+=2){
        if(n%i==0)return 0;
    }
    return 1;
}
signed main(){
    cin.tie(nullptr)->sync_with_stdio(false);
    int q,n;
    cin>>q>>n;
    prime[1]=1;
    for(int i=2;i<N;++i){
        if(prime[i]==0){
            for(int j=i*i;j<N;j+=i){
                prime[j]=1;
            }
        }
    }
    while(q--){
        string a;
        cin>>a;
        sort(all(a));
        int ans=0;
        do{
            n=stoi(a,nullptr,10);
            if(n<N)
            ans+=(prime[n]==0);
            else ans+=fp(n);
            //cout<<"--> "<<n<<'\n';
        }while(next_permutation(all(a)));
        cout<<ans<<'\n';
    }
}