package no458; import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Main { public static int INF = 1 << 29; public static void main(String[] args) { int n = new Scanner(System.in).nextInt(); ArrayList primes = Prime.primeList(20000); int[] dp = new int[n+1]; Arrays.fill(dp, -INF); dp[0] = 0; for(int p:primes) { for(int i=n;i>=p;i--) { dp[i] = Math.max(dp[i], dp[i-p] + 1); } } System.out.println(dp[n] < 0 ? -1 : dp[n]); } } class Prime { public static boolean[] isPrimeArray(int max) { boolean[] isPrime = new boolean[max+1]; Arrays.fill(isPrime, true); isPrime[0] = isPrime[1] = false; for(int i=2;i*i<=max;i++) { if (isPrime[i]) { int j = i * 2; while(j<=max) { isPrime[j] = false; j += i; } } } return isPrime; } public static ArrayList primeList(int max) { boolean[] isPrime = isPrimeArray(max); ArrayList primeList = new ArrayList(); for(int i=2;i<=max;i++) { if (isPrime[i]) { primeList.add(i); } } return primeList; } }