def
find_combinations
(num)
: n =
int(num **
0.5)
# 這裡直接開根號,縮小迴圈範圍
res =
# 前可以轉化成中間項的倍數,所以下面for迴圈求得是中間項的值
for i in
range(2
, n +1)
:if num % i ==0:
mid_01 = i # 中間數
mid_02 =
int(num / i)
# 項數
# 分解出來為mid_01*mid_02的形式,
if mid_02 %2==
1:# mid_02為奇數
first_1 =
(mid_01 - mid_02 //2)
last_1 =
(mid_01 + mid_02 //2)
if first_1 >=0:
'+'.join(
[str
(j)for j in
range
(first_1, last_1 +1)
if j >0]
))else
:# mid_02 為偶數,拆分mid_01 比如:125拆成62+63
if mid_01 %2==
1:t_01 =
int(
(mid_01 -1)
/2) t_02 =
int(
(mid_01 +1)
/2)if t_01 - mid_02 >=0:
lists_01 =
[str
(i)for i in
range
(t_01 - mid_02 +
1, t_01 +1)
if i >0]
lists_02 =
[str
(i)for i in
range
(t_02, t_02 + mid_02)
if i >0]
'+'.join(lists_01 + lists_02)
)# 此處僅僅將上面的mid_01*mid_02 調換成mid_02*mid_01 中間值和項數對調
if mid_01 %2==
1:first_2 =
(mid_02 - mid_01 //2)
last_2 =
(mid_02 + mid_01 //2)
if first_2 >=0:
'+'.join(
[str
(j)for j in
range
(first_2, last_2 +1)
if j >0]
))else
:# mid_02 為偶數,拆分mid_01:125拆成62+63
if mid_02 %2==
1:t_01 =
int(
(mid_02 -1)
/2) t_02 =
int(
(mid_02 +1)
/2)if t_01 - mid_01 >=0:
lists_01 =
[str
(i)for i in
range
(t_01 - mid_01 +
1, t_01 +1)
if i >0]
lists_02 =
[str
(i)for i in
range
(t_02, t_02 + mid_01)
if i >0]
'+'.join(lists_01 + lists_02)
)# 上面要防止第一項等於0
# 奇數特殊解
if num %2==
1:mid =
int(
(num +1)
/2)'+'
.join(
[str
(mid -1)
,str
(mid)])
)str
(num)
)if res:
return res
else
:return
[none
]# test
print
(find_combinations(63)
)
輸入乙個自然數n,求小於等於n的素數之和?
問題描述 輸入乙個自然數n,求小於等於n的素數之和 例如 樣例輸入 2 樣例輸出 2。解題思路 1 什麼是素數 素數 prime number 又稱質數,有無限個。乙個大於1的自然數,除了1和它本身外 因為1既不是素數,也不是合數 不能被其他自然數 質數 整除,換句話說就是該數除了1和它本身以外不再...
歸納策略 求前n個自然數的平方之和
求前n個自然數的平方之和 s 1 2 2 2 3 2 n 2 因為 1 2 2 2 3 2 n2 1 2 3 n 2n 1 3 又由於 1 2 3 n n n 1 2,因此得到 1 2 2 2 3 2 n 2 n n 1 2n 1 6 推導過程 有乙個三角形的數字矩陣 12 2 3 3 3 4 4 ...
1757找i個連續自然數累加為N
找i個連續自然數累加為n time limit 2 seconds memory limit 32768 k total submit 391 accepted 260 description 輸入乙個數字n,找出i個連續自然數累加為n的所有和式 i 1 input 整數n output n i個連...