#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; } |