2548 自然數積分解

2022-05-03 16:57:16 字數 1063 閱讀 8105

時間限制: 1 s

空間限制: 32000 kb

題目等級 : ** gold

題解把自然數n分解為若干個自然數之積,輸出方案數。

輸入描述 input description

自然數n,(1≤n≤2000000000)

輸出描述 output description

方案數樣例輸入 sample input

樣例輸出 sample output

資料範圍及提示 data size & hint

20 可分為

20 4 5

2 10

2 2 5

分類標籤 tags 點此展開 

深度優先搜尋

搜尋這個題資料很大(tle了2個),所以必須優化, 

先看沒優化的程式:

#include#include

using

namespace

std;

intsum;

void dfs(int k,int

n) }

}int

main()

優化思路

乙個數n,可以分為 1×n 2 x ….(n減小), 3× .. i× … 其中 i最大取到 √n,這樣 數n 被分解為兩個數的乘積 而左半部分的所有可能通過列舉各種可能值得到,而右半部分繼續遞迴處理即可。這裡在分解的時候會遇到 重複分析的情況,如16 可分為 2 4 4 ,與 4 4 2 ,因為分解時,是按照乘號左側的數由小到大來分,因此左側應該不大於右側即可。所以函式的引數中傳入前一次分解的數字,每次分解前先判斷,是否右側不小於左側。最後的結果上要加上 1xn ,因為自身也算是一種結果。

ac**:

#include#include

using

namespace

std;

int sum=1

;void dfs(int k,int

n) }

}int

main()

2548 自然數積分解

題目描述 description 把自然數 分解為若干個自然數之積,輸出方案數。輸入描述 input description 自然數n,1 n 2000000000 輸出描述 output description 方案數樣例輸入 sample input 20 樣例輸出 sample output ...

Codevs 2548 自然數積分解

題目描述 description 把自然數 分解為若干個自然數之積,輸出方案數。輸入描述 input description 自然數n,1 n 2000000000 輸出描述 output description 方案數樣例輸入 sample input 20樣例輸出 sample output 4...

自然數積分解

題目描述 把自然數 分解為若干個自然數之積,輸出方案數。輸入描述 自然數n 1 n 2000000000 輸出描述 方案數。樣例輸入 20 樣例輸出 4 資料範圍及提示 20 可分為 204 52 10 2 2 5 優化前 源 include int n,ans 0 void solve int t...