Submission
Status:
PPPPPxxPxx
Subtask/Task Score:
60/100
Score: 60
User: tull
Problemset: การเรียงสับเปลี่ยน
Language: cpp
Time: 0.005 second
Submitted On: 2026-04-25 22:38:02
#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=1e4+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=stoll(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';
}
}