gpt4 book ai didi

c# - 三角形数的除数(欧拉 12)

转载 作者:行者123 更新时间:2023-11-30 20:55:19 30 4
gpt4 key购买 nike

我发现了几个与这个问题相关的主题,我只是想知道为什么我的代码返回不正确的数据。所以我们必须找到第一个除数超过 500 的三角形数。详情可在此处找到:http://projecteuler.net/problem=12这是我的代码:

Int64 triangularnum = 1;
for (Int64 num = 2; num > 0; num++)
{
if(has501Divisors(triangularnum))
{
MessageBox.Show(triangularnum.ToString());
break;
}
triangularnum += num;
}



private bool has501Divisors(Int64 candidate)
{
bool has501 = false;
int count = 0;
for (int i = 1; i < Math.Sqrt(candidate); i++)
{
if (candidate % i == 0) count += 1;
if (count > 501)
{
return true;
}
}
return has501;
}

这给了我显然不正确的数字 842161320。

最佳答案

您应该将 count 数增加 2 而不是 1

还有你的

if (count > 501)

部分不正确,因为您的边界应该是 500 而不是 501。将其更改为 count > 500 而不是。

static void Main(string[] args)
{
Console.WriteLine(Find());
}

public static int Find()
{
int number = 0;
for (int i = 1; ; i++)
{
number += i; // number is triangle number i
if (CountDivisorsOfNumber(number) > 500)
return number;
}
}


private static int CountDivisorsOfNumber(int number)
{
int count = 0;
int end = (int)Math.Sqrt(number);
for (int i = 1; i < end; i++)
{
if (number % i == 0)
count += 2;
}
if (end * end == number) // Perfect square
count++;
return count;
}

这会打印出 76576500 并且看起来是一个正确的解决方案。

关于c# - 三角形数的除数(欧拉 12),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18383553/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com