#include <iostream> #include <set> #include <math.h> #include <string> //#include <conio.h> #define UIL unsigned long long #define UI unsigned int class prime { private: std::set<UIL> primals; public: void init(UIL max) { //dodanie pierwszych liczb pierwszych (XD) primals.insert(2); primals.insert(3); primals.insert(5); primals.insert(7); primals.insert(11); primals.insert(13); //a teraz można zacząć wyliczać for (UIL i = 14; i <= max; i++) { bool isPrim = false; for (auto v : primals) //sprawdzanie podzielności { if (i%v == 0) { isPrim = true; break; } } if(!isPrim) primals.insert(i); } } void print() { for (auto v : primals) std::cout << v << ' '; } bool isPrime(UIL x) { return primals.find(x) != primals.end(); } }; int main() { prime Prime; UIL n; std::cin >> n; UI dz = pow(10, std::to_string(n).length()-1); bool iCierpienie = false; Prime.init(n / 2); for (UI i = 0; i < std::to_string(n).length()-1; i++) { UIL a = n / dz; UIL b = n % dz; auto ddd = std::stoull(std::to_string(a) + std::to_string(b)); if (ddd<n) continue; //std::cout << a << ' ' << b << std::endl; if (Prime.isPrime(a) && Prime.isPrime(b)) { iCierpienie = true; break; } dz /= 10; } if (iCierpienie) std::cout << "TAK"; else std::cout << "NIE"; //a.init(1000); //a.print(); //std::cout << a.isPrime(99); //std::cout << n << ' ' << dz; //_getch(); 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 90 91 92 | #include <iostream> #include <set> #include <math.h> #include <string> //#include <conio.h> #define UIL unsigned long long #define UI unsigned int class prime { private: std::set<UIL> primals; public: void init(UIL max) { //dodanie pierwszych liczb pierwszych (XD) primals.insert(2); primals.insert(3); primals.insert(5); primals.insert(7); primals.insert(11); primals.insert(13); //a teraz można zacząć wyliczać for (UIL i = 14; i <= max; i++) { bool isPrim = false; for (auto v : primals) //sprawdzanie podzielności { if (i%v == 0) { isPrim = true; break; } } if(!isPrim) primals.insert(i); } } void print() { for (auto v : primals) std::cout << v << ' '; } bool isPrime(UIL x) { return primals.find(x) != primals.end(); } }; int main() { prime Prime; UIL n; std::cin >> n; UI dz = pow(10, std::to_string(n).length()-1); bool iCierpienie = false; Prime.init(n / 2); for (UI i = 0; i < std::to_string(n).length()-1; i++) { UIL a = n / dz; UIL b = n % dz; auto ddd = std::stoull(std::to_string(a) + std::to_string(b)); if (ddd<n) continue; //std::cout << a << ' ' << b << std::endl; if (Prime.isPrime(a) && Prime.isPrime(b)) { iCierpienie = true; break; } dz /= 10; } if (iCierpienie) std::cout << "TAK"; else std::cout << "NIE"; //a.init(1000); //a.print(); //std::cout << a.isPrime(99); //std::cout << n << ' ' << dz; //_getch(); return 0; } |