Python编程之欧拉计划45~46
欧拉计划
欧拉计划(Project Euler)。
45、在40755之后最小的既是五角数又是六角数的三角数是多少?
三角形数、五边形数和六角形数分别由以下公式给出:
三角形数
T
n
=
n
(
n
+
1
)
/
2
Tn=n(n+1)/2
Tn=n(n+1)/2
1, 3, 6, 10, 15, …
五角形数
P
n
=
n
(
3
n
−
1
)
/
2
Pn=n(3n−1)/2
Pn=n(3n−1)/2
1, 5, 12, 22, 35, …
六边形数
H
n
=
n
(
2
n
−
1
)
Hn=n(2n−1)
Hn=n(2n−1)
1, 6, 15, 28, 45, …
可以验证,
T
285
=
P
165
=
H
143
=
40755
T_{285} = P_{165} = H_{143} = 40755
T285=P165=H143=40755
找出下一个同时是三角形数、五角形数和六角形数的数。
分析:
六角数一定是三角数,所以只需递推六角形数,判定是否五角形数即可
n = 144
while True:
m = n*(2*n-1)
if ((m*24+1)**0.5+1)%6 == 0:
print(m,n)
break
n += 1
输出:
1533776805 27693
46、最小的不能写作一个质数与一个平方数的二倍之和的奇合数
Christian Goldbach 提出每个奇合数都可以写作一个质数与一个平方数的二倍之和:
9
=
7
+
2
×
1
2
15
=
7
+
2
×
2
2
21
=
3
+
2
×
3
2
25
=
7
+
2
×
3
2
27
=
19
+
2
×
2
2
33
=
31
+
2
×
1
2
9 = 7 + 2×1^2\\ 15 = 7 + 2×2^2\\ 21 = 3 + 2×3^2\\ 25 = 7 + 2×3^2\\ 27 = 19 + 2×2^2\\ 33 = 31 + 2×1^2\\
9=7+2×1215=7+2×2221=3+2×3225=7+2×3227=19+2×2233=31+2×12
但是这个推测是错误的。
最小的不能写作一个质数与一个平方数的二倍之和的奇合数是多少?
def is_prime(n):
if n == 2: return True
if n < 2 or n % 2 == 0: return False
for i in range(3, int(n ** 0.5) + 1, 2):
if n % i == 0: return False
return True
for i in range(3,10000,2):
guess = False
if not is_prime(i):
for k in range(1,int((i//2)**0.5)+1):
if is_prime(i - 2*k**2):
guess=True
break
if not guess:
print(i)
break
输出:
5777