123 Prime Square Remainders

题目链接

表示第 个质数, 的余数。

求满足余数 超过 的最小值。

这问题的关键在于找到一个简单的方式来表达 。我们先把 展开看看。 除了最后两项,其他能被 整除。 类似。所以 为偶数时 显然不大于

为奇数时 我们只需要考察 是奇数即可,同时,给定 ,我们能够很快的计算出 的值。

写代码得到答案。

var primes = Utils.GenPrimes(1000000).Where(p => p != 0).ToList();
int n = 7039;
for (; n < primes.Count; n += 2)
{
    var r = 2 * n * primes[n - 1];
    if (r > 10000000000)
    {
        break;
    }
}
这里说明两个事情: 1. 7037 是题目给出的数,其对应的 第一次超过了 ,所以我们从 7039 开始找即可;其实多算 7000 多个数也消耗不了啥时间。 2. primes[n - 1] 减一的原因是数组从 0 开始,而不是 1。