professor_k

Project Euler 372 - v1

Feb 22nd, 2012
286
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.     [TestFixture]
  2.     public class P372v1
  3.     {
  4.         public long GetIntegerArea(long min, long max, long number)
  5.         {
  6.             long sum = 0;
  7.             double sqrt = Math.Sqrt(number);
  8.             for (long x = min; x <= max / sqrt; x++)
  9.             {
  10.                 sum += max - (long)Math.Ceiling(x * sqrt) + 1;
  11.             }
  12.             return sum;
  13.         }
  14.  
  15.         public long Calculate(long min, long max)
  16.         {
  17.             double maxN = (double)max * max / (min * min);
  18.             long sum = 0;
  19.             for (int i = 1; i <= maxN; i++)
  20.             {
  21.                 sum += (i % 2 == 0 ? -1 : +1) * GetIntegerArea(min, max, i);
  22.             }
  23.  
  24.             return sum;
  25.         }
  26.  
  27.         [Test]
  28.         public void Run5()
  29.         {
  30.             Assert.That(GetIntegerArea(1, 5, 1), Is.EqualTo(15));
  31.             Assert.That(GetIntegerArea(1, 5, 2), Is.EqualTo(8));
  32.             Assert.That(GetIntegerArea(1, 5, 4), Is.EqualTo(6));
  33.  
  34.             Assert.That(Calculate(1, 5), Is.EqualTo(9));
  35.         }
  36.  
  37.         [Test]
  38.         public void Run100()
  39.         {
  40.             Assert.That(Calculate(1, 100), Is.EqualTo(3019));
  41.         }
  42.  
  43.         [Test]
  44.         public void Run10K()
  45.         {
  46.             Assert.That(Calculate(101, 10000), Is.EqualTo(29750422));
  47.         }
  48.  
  49.         [Test]
  50.         public void GetResult()
  51.         {
  52.             Console.WriteLine(Calculate(2000001, 1000000000));
  53.         }
  54.     }
RAW Paste Data