题目是这样的
设$p$是素数,${\sqrt{p}}$的小数部分为$x$,$\frac{1}{x}$的小数部分为$\frac{{\sqrt{p}}-15}{37}$。求所有满足条件的$p$的值
接下来我会进行代码计算和数学计算,当然,我更喜欢数学推导,因为代码只是一种遍历看是否成立的过程,这种问题数学推导后得到答案是真的快乐
首先,无论是代码还是数学证明,都需要确定x的范围
$\because 0\leq \frac{\sqrt{p}-15}{37}\leq 1\therefore 225\leq p\leq 2704$
代码
import math
def test(p):
sqrt_p=math.sqrt(p)
x=math.modf(sqrt_p)[0]
if x==0:
return False
else:
mod_x=math.modf(1/x)[0]
return math.isclose(sqrt_p-15, 37*mod_x, rel_tol=1e-5)
def is_prime(n):
if n==1:
return False
for i in range(2, int(math.sqrt(n) + 1)):
if n % i == 0:
return False
return True
for i in range(225,2704):
if test(i) and is_prime(i):
print(i)
python更多的起到的是验证的作用,我还是更喜欢数学推导
数学
根据已知条件:
$$\left ( 1\right )\sqrt{p}-\left [ \sqrt{p}\right ]= x$$
$$\left( 2\right ){\frac{1}{x}}-\left [ \frac{1}{x}\right ]= \frac{\sqrt{p}-15}{37}$$
不妨设$k^{2}< p< (k+1)^{2}$,将(1)代入(2),注意到$\left [ \sqrt{p}\right ]=k$,有$\frac{1}{\sqrt{p}-k}-\left [ \frac{1}{\sqrt{p}-k}\right ]=\frac{\sqrt{p}-15}{37}$。
将分母有理化后得:
$$\left ( 3\right )(37-p+k^{2})\sqrt{p}+(37k+15p-15k^{2})=37(p-k^{2})\left [ \frac{\sqrt{p}+k}{p-k^{2}}\right ]$$
由于(3)右边是整数,所有左边也是整数。于是$p=37+k^{2}$。再带回(3),有$\frac{15+k}{37}=\left [ \frac{\sqrt{p}+k}{37}\right ]$。由于等式右侧同样为整数,重复上述步骤,得到$k=37n-15$,同时由于最开始得到$225\leq p\leq 2704$,得到$k^{2}+37<2704$,于是$k<52$。
代入$n=1$,$k=22$,并且当$n=2$时,$k=59$,并且依次代入后与$k<52$矛盾。于是$k=22$,代入得到$p=37+k^{2}$,得到$p$为$521$
Comments | NOTHING