【发布时间】:2013-03-11 18:41:50
【问题描述】:
任务是找到一个至少有 500 个除数的三角形数。
例如 28 有 6 个除数:1,2,4,7,14,28
我的代码最多适用于 200 个除数,但对于 500 个除数,它会永远运行...
有什么办法可以优化代码。比如我想到了动态优化和记忆,但找不到方法?
int sum = 0;
int counter = 0;
int count = 1;
bool isTrue = true;
while (isTrue)
{
counter = 0;
sum += count;
for (int j = 1; j <= sum; j++)
{
if (sum % j == 0)
{
counter++;
if (counter == 500)
{
isTrue = false;
Console.WriteLine("Triangle number: {0}", sum);
break;
}
}
}
count++;
}
Console.WriteLine("Number of divisors: {0}", counter);
【问题讨论】:
-
找到这个数字的最简单方法是将 1 到 500 的数字相乘。
-
看来你也可以通过这个公式得到第n个三角形数:(n * (n + 1)) / 2。在维基百科上看到过
-
实际上,问题变成了寻找连续两个数字的情况,它们之间有 500 个因子。
-
@Todo:首先,很明显这是一个欧拉问题。第二,你为什么要欺骗你寻求帮助的人?如果您想要提示是因为您想自己解决难题,那么请不要寻求解决方案。说“我正在研究 Euler #12,我可以手动优化这段代码”。
-
@Todo:请不要再猜我们了。如果您告诉我们这是一个项目 Euler 问题,而您只是想知道下一步该往哪里看,我们就不会浪费时间猜测您需要/希望得到何种程度的帮助。你没有提到需要一个最小的解决方案,所以我给出了一个(比最小的大得多的)封闭形式的解决方案来解决问题。有人投了反对票,所以我删除了它。
标签: c# optimization divider