我在解决 Project Euler 的问题 12 时遇到了麻烦。据我所知,我的代码正确地生成了序列,并且它得到了测试问题的正确解决方案。我不相信 long
会溢出,因为它确实返回了一个解决方案,只是不是正确的解决方案。有什么想法吗?
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;
}
}
最佳答案
如果x
是一个正方形,numDivisors
计算x
的平方根两次。
关于c# - 欧拉计划的问题问题 12,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6183019/