# 2020q3 Homework5 (quiz5)
## 測驗 `1`: divop
當被除數 `slot`
為偶數:計算 $divop(orig / D1, slot)$
為奇數:計算 $divop(orig / D1, (slot + D2) / 2) + divop(前者, slot)$
可知每次遞迴 `divop` 的 `orig` 應越來越小,而除數 `slot` 則根據其奇偶會補上 `D2`, 可判斷應為 `1`
若將奇數的程式化為數學式,假設被除數為 A, 除數為 B:
$\dfrac{A}{B} = \dfrac{A/D1}{(B+1)/2} + \dfrac{\dfrac{A/D1}{(B+1)/2}}{B} = \dfrac{A/D1}{(B+1)/2}(1 + \dfrac{1}{B}) = \dfrac{A/D1}{(B+1)/2}(\dfrac{B+1}{B})$
$= \dfrac{A}{B}(\dfrac{2}{D1})$,因此 `D1` 等於 `2`。
## 測驗 `2`: LeetCode 829. [Consecutive Numbers Sum](https://leetcode.com/problems/consecutive-numbers-sum/)
給定一個正整數 N,問 N 能寫成多少種連續正整數之和,例如 $9 = 4 + 5 = 2 + 3 + 4$
若將此問題化為等差數列則會變成 $N = a + (a+1) + ... + (a+k-1) = ka + \dfrac{(k-1)k}{2}$
$ka = N - \dfrac{(k-1)k}{2}$
```cpp=
int consecutiveNumbersSum(int N)
{
if (N < 1)
return 0;
int ret = 1;
int x = N;
for (int i = 2; i < x; i++) {
x += ZZZ;
if (x % i == 0)
ret++;
}
return ret;
}
```
此題關鍵在於知道 k 的範圍後,根據 k 的變化去修正整數 `x`
k = 2 時, $2a = N -\dfrac{(2-1)2}{2} = N-1$
k = 3 時, $3a = N -\dfrac{(3-1)3}{2} = N-1-2$
k = 4 時, $4a = N -\dfrac{(4-1)4}{2} = N-1-2-3$
相當於在每一次的迴圈中,都將前一個迴圈中的整數 x ($=ka$) 再減去 (k-1),故 `ZZZ` 等於 `1-i`。
Line 9 則是判斷在該 k 值下的 a 是否為整數,是的話表示該等差數列存在。
:::warning
TODO: i < x
:::
###### tags: `linux2020`