Problem 58:

Starting with 1 and spiralling anticlockwise in the following way, a square spiral with side length 7 is formed.

3736 35 34 33 3231381716 15 141330 39 1854312 29 40 19 6 1 2 11 28 41 2078 9 10 27 422122 23 24 25 264344 45 46 47 48 49

It is interesting to note that the odd squares lie along the bottom right diagonal, but what is more interesting is that 8 out of the 13 numbers lying along both diagonals are prime; that is, a ratio of 8/13 = +/-62%.

If one complete new layer is wrapped around the spiral above, a square spiral with side length 9 will be formed. If this process is continued, what is the side length of the square spiral for which the ratio of primes along both diagonals first falls below 10%?

```
```import java.math.BigInteger;
class runner
{
public static void main (String[] args) throws java.lang.Exception
{
long time = System.currentTimeMillis();
int diff_p = 0; int prev = 0;
int i=1;
int numOfPrime = 0;
double totalDiag = 0;
while(true){
int difference = 2*diff_p;//from 8*diff_p/4
for(int j=1;j<5;j++){
BigInteger x = new BigInteger(""+(difference*j+prev));
if(x.isProbablePrime(100)){
numOfPrime++;
}
totalDiag++;
}
double cur = numOfPrime/totalDiag;
if(numOfPrime> 0 && cur < .1){
break;
}
prev = i*i;
diff_p++;
i+=2;
}
System.out.println(i);
System.out.println("time:"+(System.currentTimeMillis()-time));
}
}

Note: Got lazy and ended up using BigInteger for primality test.