Saturday 18 April 2009

PROJECT EULER #58

Link to Project Euler #58

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

37 36 35 34 33 32 31
38 17 16 15 14 13 30
39 18 5 4 3 12 29
40 19 6 1 2 11 28
41 20 7 8 9 10 27
42 21 22 23 24 25 26
43 44 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%?

for a n x n anticlockwise spiral, the corners are given by:
top right: n^2 - 3n + 3,
top left: n^2 - 2n + 2,
bottom left: n^2 - n + 1,
bottom right: n^2.


using System;
namespace project_euler
{
class Program
{
static void Main()
{
//Problem 58
DateTime start = DateTime.Now;
int i = 1,n;
double primeCount = 0, numberCount = 1;
do
{
n = 2*i + 1;
if (IsPrime(n*n - 3*n + 3))
primeCount++;
if (IsPrime(n*n - 2*n + 2))
primeCount++;
if (IsPrime(n*n - n + 1))
primeCount++;
numberCount += 4;
i++;
} while (primeCount/numberCount > 0.1);
Console.WriteLine(n);
TimeSpan time = DateTime.Now - start;
Console.WriteLine("This took {0}", time);
Console.ReadKey();
}
public static bool IsPrime(int n)
{
if (n < 2) return false;
if (n == 2) return true;
for (long i = 2; i <= Math.Sqrt(n); i++)
if (n % i == 0) return false;
return true;
}
}
}
Triple-click for answer: 26241

No comments: