Project Euler 518
Project Euler 518
题目
Prime triples and geometric sequences
Let $S(n) = a+b+c$ over all triples $(a,b,c)$ such that:
- $a, b$, and $c$ are prime numbers.
- $a < b < c < n$.
- $a+1, b+1$, and $c+1$ form a geometric sequence.
For example, $S(100) = 1035$ with the following triples:
$\begin{aligned}
& (2, 5, 11), (2, 11, 47), (5, 11, 23), (5, 17, 53), (7, 11, 17), (7, 23, 71), (11, 23, 47), \
& (17, 23, 31), (17, 41, 97), (31, 47, 71), (71, 83, 97)
\end{aligned}$
Find $S(10^8)$.
解决方案
如果$a+1,b+1,c+1$是一个等比数列,那么不难观察出$(b+1)^2=(a+1)(c+1)$。
那么,不难发现,如果$a+1$有一些质因子$p$的指数是奇数,那么为了确保$b+1$是一个平方数,$c+1$的质因子$p$的指数也必须是奇数。
假设函数$f$定义如下:$f(n)=m$意味着$m$是最小的因子使得$\dfrac{n}{m}$是平方数。
如果两个质数$p,q$满足$f(p+1)=f(q+1)$,那么这对$(p,q)$才有可能产生一个答案。因此维护一些链表,这些链表用于存储$f$值相等情况下的$n$。
由于函数$f$值是无平方因子数,因此这些链表的数量比较多,长度也比较短,那么可以在每条链表上进行二重循环,枚举$a+1,c+1$的值。最终计算出$b=\sqrt{(a+1)(c+1)}-1$后,判断$b$是否为质数即可。
代码
1 |
|