Submission
Status:
PPPPPxxPxx
Subtask/Task Score:
60/100
Score: 60
User: Bestzu
Problemset: การเรียงสับเปลี่ยน
Language: cpp
Time: 0.051 second
Submitted On: 2025-10-07 11:37:58
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
const int N = 1e7;
vector<bool> is_prime(N + 1, true);
vector<int> prime_num;
void sieve() {
is_prime[0] = false;
is_prime[1] = false;
int lim = (int)floor(sqrt((double)N));
for (int i = 2; i <= lim; i++) {
if (!is_prime[i]) continue;
long long start = 1LL * i * i;
for (long long j = start; j <= N; j += i) {
is_prime[(int)j] = false;
}
}
for (int i = 2; i <= N; i++)
if (is_prime[i]) prime_num.push_back(i);
}
bool isPrime(int x) {
if (x < 2 || x > N) return false;
return is_prime[x];
}
int main() {
ios::sync_with_stdio(false); cin.tie(0);
sieve();
int q; cin >> q;
int dumb; cin >> dumb;
while (q--) {
string s; cin >> s;
sort(s.begin(), s.end());
int cnt = 0;
do {
int x = stoi(s);
if (isPrime(x)) cnt++;
} while (next_permutation(s.begin(), s.end()));
cout << cnt << endl;
}
return 0;
}