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