#include <cstdio> #include <cmath> long long dec[14] = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000, 10000000000, 100000000000, 1000000000000, 10000000000000}; bool isPrime(long long num) { if(num == 0 || num == 1) { return false; } if(num == 2 || num == 3) { return true; } int sqrt_ = sqrt(num + 1) + 1; for(int divider=2; divider<sqrt_; ++divider) { if(num % divider == 0) { return false; } } return true; } long long getNum(int number[], int begin, int end) { long long num = 0; for(int size = end - begin; begin != end; ++begin, --size) { num += number[begin] * dec[size-1]; } return num; } /*void getNumTest() { int size = 5; int num[size] = {5,6,7,8,9}; int begin = 2; int end = 5; printf("Test: %lld\n", getNum(num, begin, end)); }*/ bool getNextPair(int number[], int size, int& pos, long long& num1, long long& num2) { while(pos < size) { if(number[pos] == 0) { ++pos; continue; } num1 = getNum(number, 0, pos); num2 = getNum(number, pos, size); return true; } return false; } /*void getNextPairTest() { int size = 5; int num[size] = {5,6,7,8,9}; int pos = 2; long long num1, num2; getNextPair(num, size, pos, num1, num2); printf("Test: %lld, %lld\n", num1, num2); }*/ /*void getNextPairTest1() { int size = 6; int num[size] = {1,0,0,1,0,0}; int pos = 1; long long num1, num2; getNextPair(num, size, pos, num1, num2); printf("Test: %lld, %lld\n", num1, num2); }*/ bool consistsOf2Primes(int number[], int size) { int pos = 1; long long num1, num2; while(size > pos) { if(getNextPair(number, size, pos, num1, num2)) { if(isPrime(num1) && isPrime(num2)) { return true; } ++pos; } else { break; } } return false; } int main() { char number[15]; int num[15]; int i = 0; scanf("%s", number); while(number[i] != '\0') { num[i] = number[i]-48; ++i; } if(consistsOf2Primes(num, i)) { printf("TAK\n"); } else { printf("NIE\n"); } 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 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | #include <cstdio> #include <cmath> long long dec[14] = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000, 10000000000, 100000000000, 1000000000000, 10000000000000}; bool isPrime(long long num) { if(num == 0 || num == 1) { return false; } if(num == 2 || num == 3) { return true; } int sqrt_ = sqrt(num + 1) + 1; for(int divider=2; divider<sqrt_; ++divider) { if(num % divider == 0) { return false; } } return true; } long long getNum(int number[], int begin, int end) { long long num = 0; for(int size = end - begin; begin != end; ++begin, --size) { num += number[begin] * dec[size-1]; } return num; } /*void getNumTest() { int size = 5; int num[size] = {5,6,7,8,9}; int begin = 2; int end = 5; printf("Test: %lld\n", getNum(num, begin, end)); }*/ bool getNextPair(int number[], int size, int& pos, long long& num1, long long& num2) { while(pos < size) { if(number[pos] == 0) { ++pos; continue; } num1 = getNum(number, 0, pos); num2 = getNum(number, pos, size); return true; } return false; } /*void getNextPairTest() { int size = 5; int num[size] = {5,6,7,8,9}; int pos = 2; long long num1, num2; getNextPair(num, size, pos, num1, num2); printf("Test: %lld, %lld\n", num1, num2); }*/ /*void getNextPairTest1() { int size = 6; int num[size] = {1,0,0,1,0,0}; int pos = 1; long long num1, num2; getNextPair(num, size, pos, num1, num2); printf("Test: %lld, %lld\n", num1, num2); }*/ bool consistsOf2Primes(int number[], int size) { int pos = 1; long long num1, num2; while(size > pos) { if(getNextPair(number, size, pos, num1, num2)) { if(isPrime(num1) && isPrime(num2)) { return true; } ++pos; } else { break; } } return false; } int main() { char number[15]; int num[15]; int i = 0; scanf("%s", number); while(number[i] != '\0') { num[i] = number[i]-48; ++i; } if(consistsOf2Primes(num, i)) { printf("TAK\n"); } else { printf("NIE\n"); } return 0; } |