#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
#define LOG if (false) cerr
typedef long long ll;
vector<int> pierwsze;
void obliczLiczbyPierwsze(int limit) {
vector<bool> sito = vector<bool>(limit + 1, true);
sito[0] = sito[1] = false;
int pierwiastek = sqrt(limit) + 1;
int i, j;
for (i = 2; i <= pierwiastek; i++) {
if (sito[i]) {
for (j = i * i; j <= limit; j += i) {
sito[j] = false;
}
}
}
for (i = 0; i <= limit; i++) {
if (sito[i]) {
pierwsze.push_back(i);
}
}
}
bool czyPierwsza(ll x) {
bool pierwsza = true;
size_t i;
if (x < 2) {
pierwsza = false;
}
else if (x > 2) {
int limit = sqrt(x) + 1;
for (i = 0; pierwsze[i] <= limit; i++) {
if (x % pierwsze[i] == 0) {
pierwsza = false;
break;
}
}
}
return pierwsza;
}
bool czyDruga(ll n) {
bool druga = false;
ll lewa, prawa, mnoznik;
lewa = n;
prawa = 0;
mnoznik = 1;
while (lewa >= 10) {
int cyfra = lewa % 10;
prawa = mnoznik * cyfra + prawa;
lewa = lewa / 10;
mnoznik *= 10;
if (cyfra != 0 && czyPierwsza(lewa) && czyPierwsza(prawa)) {
druga = true;
break;
}
}
return druga;
}
int main() {
ll n;
cin >> n;
obliczLiczbyPierwsze(sqrt(n / 10) + 100);
cout << (czyDruga(n) ? "TAK" : "NIE");
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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | #include <iostream> #include <vector> #include <cmath> using namespace std; #define LOG if (false) cerr typedef long long ll; vector<int> pierwsze; void obliczLiczbyPierwsze(int limit) { vector<bool> sito = vector<bool>(limit + 1, true); sito[0] = sito[1] = false; int pierwiastek = sqrt(limit) + 1; int i, j; for (i = 2; i <= pierwiastek; i++) { if (sito[i]) { for (j = i * i; j <= limit; j += i) { sito[j] = false; } } } for (i = 0; i <= limit; i++) { if (sito[i]) { pierwsze.push_back(i); } } } bool czyPierwsza(ll x) { bool pierwsza = true; size_t i; if (x < 2) { pierwsza = false; } else if (x > 2) { int limit = sqrt(x) + 1; for (i = 0; pierwsze[i] <= limit; i++) { if (x % pierwsze[i] == 0) { pierwsza = false; break; } } } return pierwsza; } bool czyDruga(ll n) { bool druga = false; ll lewa, prawa, mnoznik; lewa = n; prawa = 0; mnoznik = 1; while (lewa >= 10) { int cyfra = lewa % 10; prawa = mnoznik * cyfra + prawa; lewa = lewa / 10; mnoznik *= 10; if (cyfra != 0 && czyPierwsza(lewa) && czyPierwsza(prawa)) { druga = true; break; } } return druga; } int main() { ll n; cin >> n; obliczLiczbyPierwsze(sqrt(n / 10) + 100); cout << (czyDruga(n) ? "TAK" : "NIE"); return 0; } |
English