Contents
Problem
給你 N ,看 N 可以用幾組連續正整數的和表示。例如: 9 = 2 + 3 + 4 = 4 + 5 = 9 , 輸出 3 組。
Solution
N 可以表示成連續的正整數,也就是 $N = A + (A + 1) + \cdots + (B - 1) + B$,可以寫成: ${(A+B)\times(A-B+1)}\over2$。
而 $A+B$ 和 $A-B+1$ 必定是一個奇數一個偶數,稍微假設一下 A 和 B 的奇偶狀況即可得知。而偶數的除以二,剩下的奇數就是 N 的因數,所以我們要求的就是 N 的奇因數個數。
作法: 先建出質數表,將數字先除以二直到不能除,剩下的去做質因數分解,再將各項的 次方+1 相乘起來,就是奇因數的個數了。因為質數除了 2 以外皆是奇數,奇數乘奇數仍然是奇數,也就是看有幾種組合了。
在建質數表時記得只需要建到 測資的開根號 ,除不完剩下的就是質數了,因為如果不是質數,他一定可以分解成其他質數(算術基本定理),而這樣在前面就處理過了。(雖然實際上UVa的測資只需要建到 1e6
就可以了)
p.s. 0 要單獨出來處理
Code
1 |
|