#include #include #include #include int scanInput(){ int a = 0; scanf("%d", &a); return a; } int isPrime(int i){ int max = (int)(sqrt(i) + 1); for (int j = 2; j < max; j++) { if (i % j == 0) return 0; } return 1; } int * generatePrimes(int distance){ int * arr = (int *)calloc(distance, sizeof (int)); int length = 0; for (int i = 2; i < distance; i++){ if (isPrime(i)) arr[length++] = i; } return arr; } long long int numberOfWaysFromPoint(int * primes, long long int * arr, int distance, int point){ if (arr[primes[point]] != -1) return arr[primes[point]]; long long int sum = 0; if (distance - primes[point] <= 14) sum = 1; for (int i = point + 1; i < distance; i++){ if (primes[i] == 0) break; else if ((primes[i] - primes[point]) <= 14){ sum += numberOfWaysFromPoint(primes, arr, distance, i); } else break; } arr[primes[point]] = sum; return sum; } long long int calculateNumberOfWays(int * primes, long long int * arr, int distance){ long long int sum = numberOfWaysFromPoint(primes, arr, distance, 0); /*for (int i = 0; i < distance; i++) { if (primes[i] == 0) break; if (primes[i] < 14){ sum += numberOfWaysFromPoint(primes, distance, i); } }*/ return sum; } int main() { long long int * arr = (long long int *)malloc(sizeof (long long int) * 211); memset(arr, -1ll, sizeof(long long int) * 211); int distance = scanInput(); int * primes = generatePrimes(distance); long long int sum = calculateNumberOfWays(primes, arr, distance); printf("%lld\n", sum); free(primes); free(arr); return 0; }