120 Square Remainders
令 是 除以 的余数。随着 的变化, 也会变化,但是众多 一定存在最大值 。
当 时,求 。
给定一个 取何值时能让 最大呢?
首先考虑n是偶数的时候。 由于 是偶数, 能够被 整除,同理, 都可以被 整除。 所以,最后的余数是 1,显然不大,下面我们考虑 是奇数的时候。 模 余数是 ,同理, 模 都余 。
那么上面的数模 等于
想要 模 余数最大呢,让 越接近 越好,也就是 越接近 越好,但是不能等于 。
一定是偶数。所以,当 是奇数的时候,,当 是偶数的时候,。
有了以上的分析,很容易就能写出获取 的函数:
离最后的答案只差一步
public static int GetAnswer()
{
int sum = 0;
for (int a = 3; a <= 1000; a++)
{
sum += GetMaxRByA(a);
}
return sum.ToString();
}
有了数学分析得到的结论之后,程序的时间复杂度是 ,理论最低值,而且这里 就 1000,0ms 就完成了计算。