0131 素立方数组合
* * * *
拉格朗日计划
* * * *
素立方数组合

对于某些素数p,存在正整数n,使得$n^3 + n^2p$是立方数。

例如,对于$p=19$有$8^3+8^2\times 19=12^3$。

对于给定的素数p而言,若这样的n存在,那么它也是唯一的。不过在小于一百的素数中,只有四个素数有上述性质。

在小于一百万的素数中,有多少个素数有上述性质?

本题难度:



解答

将原式写作 $$n^3\cdot\frac{n+p}{n}=m^3,$$ 从而$\sqrt[3]{(n+p)/n}$需要是有理数。令 $$b^3=n+p, \quad a^3=n,$$ 则有 $$p=b^3-a^3=(b-a)(a^2+b^2+ab),$$ 由于p是素数,因此$b-a$只能为1。将$b=a+1$和$n=a^3$带入可得 $$p=a^2+(a+1)^2+a(a+1)=3a^2+3a+1, \quad m=n\cdot\sqrt[3]{\frac{n+p}{n}}=n\cdot\frac{b}{a}=a^2(a+1).$$ 因此只需找出不超过一百万的、形如$3a^2+3a+1$的素数即可,易得共有$173$个这样的数。

target=1000000
d=[0]*target
n=2
while n < target:
    for i in range(n+n,target,n):
        d[i]=d[i]+1
    n=n+1
    while n< target and d[n]>0:
        n=n+1

q=set([k for k in range(2,target) if d[k]==0])

r=[p for a in range(1,600) for p in [3*a*a+3*a+1] if p in q and p< target]

print len(r)