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;
}
}
If
xis a squarenumDivisorscounts the square root ofxtwice.