#include using namespace std; vector primes = {3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211}; bool isPrime(long long int number) { for (long long int i = 2; i < number; i++) { if (number % i == 0) { return false; } } return true; } long long int counter = 0; vector dp(47,-1); long long int choose_next(vector& primes, long long int c_index, long long int prev, long long int dest){ if(dp[c_index] !=-1){ return dp[c_index]; } long long int tmp = 0; for( long long int i = c_index ; i primes.size() - 1 || primes[index] > P) return 0; if (primes[index] == P) return 1; long long int result = 0; for (long long int i = index + 1; i < index + 13; i++) { if (primes[index] - primes[i] <= 14) result += count(i, P); } return result; } long long int getFi(long long int P) { long long int result = 0; for (long long int prime: primes) { if (prime <= P) { result++; } } return result; } long long int fact(long long int x) { long long int res = 1; for (long long int i = 1; i <= x; i++) { res *= i; } return res; } int main() { long long int P; cin >> P; long long int fi = getFi(P); //printf("fi: %d\n", fi); /*long result = 0; const long x = fi - 2; for (long long int i = 0; i <= x; i++) { const long factOfI = fact(i); long long int upperPart = 1; for (long long int j = 0; j < x ; j++) { upperPart *= (x - j); } result += (upperPart / factOfI); } prlong long intf("res: %d\n", result);*/ //long long int result = count(0, P); //cout<