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 就完成了计算。