humanstory humanstory - 1 month ago 8
C# Question

Problem with Project Euler Problem 12

I'm having trouble with Project Euler's problem 12. My code is correctly generating the series, as far as I can tell, and it gets the correct solution to the test problem. I don't believe that

long
is getting overflowed because it does return a solution, just not the correct one. Any thoughts?


The sequence of triangle numbers is
generated by adding the natural
numbers. So the 7th triangle number
would be 1 + 2 + 3 + 4 + 5 + 6 + 7 =
28. The first ten terms would be:

1, 3, 6, 10, 15, 21, 28, 36, 45, 55,
...

Let us list the factors of the first
seven triangle numbers:

1: 1 3: 1,3 6: 1,2,3,6 10: 1,2,5,10
15: 1,3,5,15 21: 1,3,7,21 28:
1,2,4,7,14,28 We can see that 28 is
the first triangle number to have over
five divisors.

What is the value of the first
triangle number to have over five
hundred divisors?


class Program
{
static long lastTriangle = 1;

static void Main(string[] args)
{
long x = 1;
do
{
x = nextTriangle(x);
Console.WriteLine(x);
} while (numDivisors(x) < 500);

Console.WriteLine(x);
Console.ReadLine();
}

static long nextTriangle(long arg)
{
lastTriangle += 1;
long toReturn = lastTriangle + arg;
return toReturn;
}

static long numDivisors(long arg)
{
long count = 0;
long lastDivisor = 0;
Boolean atHalfWay = false;
for (long x = 1; x <= arg && !atHalfWay; x++)
{
if (arg % x == 0 && x != lastDivisor)
{
count++;
lastDivisor = arg / x;
}
else if (x == lastDivisor)
{
atHalfWay = true;

}
}
return count*2;
}
}

Answer

If x is a square numDivisors counts the square root of x twice.

Comments