86 Cuboid Route
小蜘蛛从立方体的一点走最短距离爬到对顶点,爬过的长度可能是整数,比如立方体三维分别是 6,5,3,那么最短距离是 10,但也不总是整数。
对于三边最长是 的立方体,当 时,有 2060 个边长均为整数的不一样的立方体,其蜘蛛爬过的最短距离是整数,而 时,有 1975 个不同的立方体。
求满足上述条件的立方体个数超过一百万时 的最小值。
如果能够在不需要计算出具体满足题意的值的情况下,只通过计数得到结果,那么耗时将相当短。
不妨设三边和最大值满足关系 ,那么 ,最短路径的长度是 ,如果最短路径是整数,那么 和 可以在一定范围内变化。 最小也就是 的一半或者一半加一,最长的话就是等于 ,同时要满足 。所以很容易通过某个给定的 来得到满足条件的立方体个数。
int GetCountByA(int a)
{
int count = 0;
for (int bc = 2; bc <= 2 * a; bc++)
{
int slope = (int)Math.Sqrt(a * a + bc * bc);
if (a * a + bc * bc == slope * slope)
{
int bStart = bc % 2 == 0 ? bc / 2 : bc / 2 + 1;
int bEnd = Math.Min(a, bc - 1);
count += bEnd - bStart + 1;
}
}
return count;
}
对 ,也就是 进行遍历,当总数大于一百万时停止,得到要求的 。