_sln_ asks
13 years ago
(程式)給定N,M屬於自然數,請問:把N分成M個正整數相成的方法有幾種. ex:N=30,M=3 則方法只有一種,即2*3*5
latest #53
_sln_ says
13 years ago
假設已有直因數分解!!
_sln_ says
13 years ago
喔對@@ 分成的M份,每個數都要>1 sorry
ろろろ says
13 years ago
這感覺比較像是數學問題XD
立即下載
_sln_ says
13 years ago
如果可以找出一般式也是可以啦 XDDD
yenlung says
13 years ago
我覺得這題出程式題很不錯
yenlung says
13 years ago
主要應該是要寫因式分解吧
yenlung says
13 years ago
然後又可以順便帶入數學套件的好處
回歸清流的蔡承 says
13 years ago
應該是重複組合的問題,所以要用到H吧XD
__Apua
13 years ago
例子有誤。「把N分成M個正整數相乘的方法....」,1x5x6也是一種。
__Apua
13 years ago
1x1x30也是一種
人牛。 says
13 years ago
有說要大於1
人牛。 says
13 years ago
前面留言有補充
_sln_ says
13 years ago
因式分解應該是沒問題吧@@
_sln_ says
13 years ago
h可以直接寫出答案????
__Apua
13 years ago
我先暴力因式分解作這題。另外題意還有模糊的地方,我就寫在註解裡不管了。總之先跑跑看吧!paste.pocoo.org/show/441...
__Apua
13 years ago
我記得作業研究有教非暴力因式分解這題的作法。以前劉明郎老師有教,印象中....(我作研最差了,抱歉)
回歸清流的蔡承 says
13 years ago
_sln_: h不能直接寫出答案,可以試試看h的想法,用暴力的會比較好
_sln_ says
13 years ago
Apua: 嗯嗯 因是分解是沒問題了~
_sln_ shares
13 years ago
ex: 如果想做2^2*3*5 分成3等份
_sln_ shares
13 years ago
那就先輸入3
_sln_ shares
13 years ago
然後接著輸入質因數
_sln_ shares
13 years ago
2
_sln_ shares
13 years ago
2
__Apua
13 years ago
我覺得想不出其他解法了。放棄。然後順便把昨天寫的稍微整理一下。程式碼
_sln_ shares
13 years ago
_sln_ shares
13 years ago
_sln_ shares
13 years ago
然後最後再打"ok"
_sln_ shares
13 years ago
就會跑出來了
_sln_ shares
13 years ago
Apua: 你說因數分解? 還是這題?
__Apua
13 years ago
_sln_: 這題吧?你說「因數分解」是指「質因數分解」嗎?
__Apua
13 years ago
看你跑出來的程式碼結果,「正整數相乘」正整數必須相異嗎?
__Apua
13 years ago
改了。昨晚就有考慮到,所以預留了一個變數在f裡>
__Apua
13 years ago
_sln_: 建議你寫程式前,先用文字描述出你想做的步驟(註解),再依照你的步驟去撰寫程式碼。這樣你自己回頭去看不會亂,別人一看就知道你要做什麼,必要的時候也好幫你修改程式碼。
_sln_ says
13 years ago
Apua: 恩對 需要相異沒錯@@ (sorry 不過也是可以改成相同啦~~
_sln_ says
13 years ago
Apua: 請問學長有辦法給定生成n個變數a_1,a_2,.....a_n嘛?
__Apua
13 years ago
_sln_: 什麼意思?你是要餵n個變數給程式,還是要生成n個值??
_sln_ says
13 years ago
Apua: 就是給一個n,然後生出n個變數
_sln_ says
13 years ago
Apua: 還有就是給一個n,然後要如何做n層迴圈?
yenlung says
13 years ago
_sln_: 你應該把你的構想先說出來, 要算什麼等等。
_sln_ says
13 years ago
yenlung: 嗯嗯 就是先給質因數(假設n個)進去和要分成m等份,之後把所有可能m**n種列出來後再慢慢刪掉不合的得出答案
yenlung says
13 years ago
應該 n**m?
yenlung says
13 years ago
如果要暴力法可以這樣想: 比如說我們分解好是 2^5 x 3^7 ^ 5^2
yenlung says
13 years ago
2^5 x 3^7 x 5^2
yenlung says
13 years ago
要變成三個數相乘, 那就一個質因數一個質因數考慮。比如説 2 有 5 個, 分成三個有 C(7,2) 種, 然後 3, 然後 5... 每種列出所有可能、合併, 結果再去掉不合和重覆。
_sln_ says
13 years ago
應該是m**n
_sln_ says
13 years ago
嗯嗯 我懂了 可是如果要電腦跑的話 這樣好像比較不容易列(寫)出來吧?
__Apua
13 years ago
只要你有先想好流程,都能寫出來
yenlung says
13 years ago
用 list 應該這種還算簡單吧。
__Apua
13 years ago
yenlung: 另外,要解決重複的問題,可以用set()物件。我在解projectEuler的題目時還蠻常用的。
yenlung says
13 years ago
嗯, 所以把每組數字由小到大排好, 檢查是個解, 再放到一個 set 就好了。
_sln_ says
13 years ago
yenlung: 嗯嗯 不過我做的方法已經可以把重複的去掉了@@ 可ˇ是碰到更大的問題就是了...
back to top