120 Square Remainders

Problem 120

令 是 除以 的余数。随着 的变化, 也会变化,但是众多 一定存在最大值 。

当 时,求 。

给定一个 取何值时能让 最大呢?

首先考虑n是偶数的时候。 由于 是偶数, 能够被 整除,同理, 都可以被 整除。 所以,最后的余数是 1,显然不大,下面我们考虑 是奇数的时候。 模 余数是 ,同理, 模 都余 。

那么上面的数模 等于

想要 模 余数最大呢,让 越接近 越好,也就是 越接近 越好,但是不能等于 。

一定是偶数。所以,当 是奇数的时候,,当 是偶数的时候,。

有了以上的分析,很容易就能写出获取 的函数:

private static int GetMaxRByA(int a)
{
    return (a - 1) / 2 * 2 * a;
}

离最后的答案只差一步

public static int GetAnswer()
{
    int sum = 0;
    for (int a = 3; a <= 1000; a++)
    {
        sum += GetMaxRByA(a);
    }

    return sum.ToString();
}

有了数学分析得到的结论之后,程序的时间复杂度是 ,理论最低值,而且这里 就 1000,0ms 就完成了计算。