[英]how know value in the previous code in python?
v = ??
my_range = list(range(v))
print(sum(my_range, v) + pow(v, v, v))
我想知道得到值 output=820
您可以在預期的整數范圍內嘗試二進制斬波:
def fn(v):
my_range = list(range(int(v)))
return sum(my_range, v) + pow(v, v, v)
a = 1
b = 100
r = 0
while True:
v = (a + b) // 2
r = fn(v)
print(v, r)
if r == 820:
break
elif r > 820:
b = v
else:
a = v
結果:
50 1275
25 325
37 703
43 946
40 820
這基本上是數學:
my_range
= [0, 1, 2, 3, ..., v - 1]
sum(my_range, v)
與1 + 2 + 3 + ... + v
相同。
pow(v, v, v)
= v^v % v
= 0
,因為 v * v * v * .... 必須是 v 的倍數,所以 mod 為 0。
因此,我們正在求解1 + 2 + 3 + ... + v
= 820
使用求和公式(∑x 從 i=1 到 n = n(n+1)/2 ):
v(v+1)/2 = 820 -> v(v+1) = 1640 -> v^2 + v - 1640 = 0
(v - 40)(v + 41) = 0
v = 40
如果 N 是一個連續的正整數范圍(從 1 開始)的總和,則該范圍內的最大數字可以表示為 N * 2 的平方根(向下舍入到最接近的整數)
所以:
N = 820
print(int((N*2)**0.5))
輸出:
40
筆記:
連續數字范圍(從 1 開始)到 N 結束的總和可以通過以下方式計算:
(N * (N+1)) // 2
...因此這里顯示的“反向”方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.