验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。
例如:
1^3=1
2^3=3+5
3^3=7+9+11
4^3=13+15+17+19
输入一个正整数m(m≤100),将m的立方写成m个连续奇数之和的形式输出。
- 思路直接使用暴力法,枚举所有情况。超时。经过推算得出,加法表达式的第一个字母的通项是 n^2 - n + 1 。
代码如下:
def nkcsi():
while True:
try:
n = int(input())
except:
break
res = pow(n,3)
if n <=0:
continue
if res != 1:
base = pow(n,2) - n + 1
temp = [i for i in range(base, res + 1) if i % 2 != 0]
for i in range(len(temp)):
num = temp[i]
find = False
for j in range(i + 1, len(temp)):
num += temp[j]
if num == res:
print("+".join([str(temp[k]) for k in range(i, j + 1)]))
find = True
break
if find:
break
else:
print("1")