#include <iostream>
#include <vector>
#include <cmath>
#include <cstdlib>
#include <cstring>
using namespace std;
const long long LIMIT = 3162279;
int mem[LIMIT];
vector<int> sp;
bool isPrime(int x) {
for (int i : sp)
if (i < x && (x%i == 0)) {
return false;
}
return true;
}
int main() {
memset(mem, 1, sizeof mem);
mem[0] = mem[1] = 0;
for (int i = 4; i < LIMIT-1; i += 2)
mem[i] = 0;
for (int i = 3; i < LIMIT-1; i += 2) {
if (mem[i]) {
for (int k = i*2; k < LIMIT-1; k += i) {
mem[k] = 0;
}
}
}
for (int i = 2; i < LIMIT-1; ++i)
if (mem[i])
sp.push_back(i);
string n;
cin >> n;
for (int i = 1; i < n.size(); ++i) {
string n1s = n.substr(0,i);
string n2s = n.substr(i);
long long n1 = atoll(n1s.c_str());
long long n2 = atoll(n2s.c_str());
if (n1 == 0 || to_string(n2) != n2s)
continue;
if (isPrime(n1) && isPrime(n2)) {
cout << "TAK" << endl;
return 0;
}
}
cout << "NIE" << endl;
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | #include <iostream> #include <vector> #include <cmath> #include <cstdlib> #include <cstring> using namespace std; const long long LIMIT = 3162279; int mem[LIMIT]; vector<int> sp; bool isPrime(int x) { for (int i : sp) if (i < x && (x%i == 0)) { return false; } return true; } int main() { memset(mem, 1, sizeof mem); mem[0] = mem[1] = 0; for (int i = 4; i < LIMIT-1; i += 2) mem[i] = 0; for (int i = 3; i < LIMIT-1; i += 2) { if (mem[i]) { for (int k = i*2; k < LIMIT-1; k += i) { mem[k] = 0; } } } for (int i = 2; i < LIMIT-1; ++i) if (mem[i]) sp.push_back(i); string n; cin >> n; for (int i = 1; i < n.size(); ++i) { string n1s = n.substr(0,i); string n2s = n.substr(i); long long n1 = atoll(n1s.c_str()); long long n2 = atoll(n2s.c_str()); if (n1 == 0 || to_string(n2) != n2s) continue; if (isPrime(n1) && isPrime(n2)) { cout << "TAK" << endl; return 0; } } cout << "NIE" << endl; return 0; } |
English