humanstory - 1 year ago 112
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
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);
}

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

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;
}
}
``````

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