Problem:

You are on your way to find the gifts. All the gifts lie in your path in a straight line at prime numbers and your house is at 0.

Solution:

The problem is asking what the nearest prime to the current location is. Every prime is surrounded by other numbers (869, 870, ...) which can be prime; for example, 870 has the prime 877 close to it, but also 863, they are both 7 numbers away, resulting in the output of 7, but if that wasn't the case, then the closest prime distance would be the answer.

We first need a way to know when a number is prime, which requires simple math:

``````private static boolean check_prime(long n) {
for(long i = 2; i<Math.sqrt(n);i++) {
if((n%i)==0)
return false;
}
return true;
}
``````

or you can use the built in function of big integer to check for primes:

``````private static boolean check_prime(long n)
{
// Converting long to BigInteger
BigInteger b = new BigInteger(String.valueOf(n));

return b.isProbablePrime(1);
}
``````

Once you have that, you have to loop to both sides of the number and continuously check if the number that you looped to is prime, like so:

``````while (true) {
long number, i;

// get input from keyboard
Scanner scanner = new Scanner(System.in);
number = scanner.nextLong();

if (check_prime(number))
// if already prime, just print 0
System.out.println(0);
else {
// loop to both sides of the number
for (i = 1; i < number - 2; i++) {
// this print is for debugging purposes
System.out.println((number - i) + ", " + (number + i));
if (check_prime(number - i)) {
// found answer as prime before input
System.out.printf("%d\n", (number - (number - i)));
break;
} else if (check_prime(number + i)) {
// found answer as prime after input
System.out.printf("%d\n", ((number + i) - number));
break;
}
}
}
}
``````

Hope this helped!