python小练习(031):找出连续数字的平方和是回文的数字
python小练习(030),传送门今天的小练习来一道有趣的数学题:找出连续数字的平方和又是回文的数字
595 这个回文数很有趣,它可以被写作连续数字的平方数之和:6**2 + 7**2 + 8**2 + 9**2 + 10**2 + 11**2 + 12**2。
1000 以下一共有 11 个这样可以写作连续数字平方和的回文数,这 11 个数字的和是 4164。
这11个数分别是多少?分别由哪些连续数的平方和构成? 预留2楼
提示:
这题之所以说比较简单是因为让我们找的是连续数的平方和,这样我们只需要确定连续数的开始和结尾就能知道计算的范围了。 本帖最后由 冬雪雪冬 于 2016-11-30 21:20 编辑
用个简单粗暴的方法:
注: 最后一行的2应该是平方,但发帖变成了2。这个字符是chr(178).
sq =
n =
for i in range(22):
for j in range(i + 2, 23):
k = sum(sq)
if k > 999:
break
if str(k) == str(k)[::-1]:
print('2 + '.join(n) + '2 =', k) 刚看到第6课的新手表示瑟瑟发抖{:10_266:} 解答:
#coding:utf-8
def is_cycle(n):
return True if str(n) == str(n)[::-1] else False
limit = 1000
window_s = 1
window_e = int(limit ** 0.5)
while window_s<window_e:
s = window_s*window_s
for i in range(window_s+1,window_e):
s += i*i
if s >= limit:
break
if is_cycle(s):
print (s, list(range(window_s,i+1)))
window_s += 1
输出:
5
55
505
818
77
636
595
181
434
313
545 for i in range(1,32):
sum=0
for j in range(i,32):
sum+=j**2
if j>i and sum<1000 and str(sum)==str(sum)[::-1]:
print(sum) for i in range(1,32):
sum=0
for j in range(i,32):
sum+=j**2
if j>i and sum<1000 and str(sum)==str(sum)[::-1]:
print(sum) if str(n) == str(n)[::-1]:
return True
return False
# 1000 以下一共有 11 个这样可以写作连续数字平方和的回文数,下方的总和是968
c = [ i*i for i in range (1,23)]
# c =
result = []
for i in range (22):
sum_1 = 0
for j in range (i,22):
sum_1 += c
if i2i(sum_1) and j > i and sum_1 <= 1000:
result.append(, c, sum_1])
for i in range(11):
for j in range(2):
result = result ** (1/2)
result = int(result)
#print(result)
for i in range (11):
while result[-2] - result[-3] > 1:
result.insert(-2,result[-3] + 1)
print ( result[-1],result[:-1])
页:
[1]