Re: [中學] 數論

看板Math作者 (Chaotic Good)時間14年前 (2011/12/19 05:46), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串7/20 (看更多)
※ 引述《lilygarfield (愛情讓我變成詩人)》之銘言: : 從 : 1/2, 1/3, 1/4, 1/5, ..., 1/99 中 : 挑出10個數,使之加總為 1 : 該挑那10個數? 從yoyo給出的做法: 1/n=1/(n+1)+1/(n(n+1)), 我們可以討論一個推廣的方式,即:找出正整數a,b使得 1/n=1/a+1/b。 1/n=1/a+1/b <=> ab-na-nb=0 <=> (a-n)(b-n)=n^2 其中a,b是未知數,因此事實上,我們要做的事僅是找出將 n^2 分解兩個因數的方法; 接著再把這兩個因數各加 n ,即可得到 a,b 的取值。 1/n=1/(n+1)+1/(n(n+1))這個方法,即是考慮 n^2=1 X n^2 這個分解法。 承接Sfly所提及的最大項最小解思維, 一個natural的問題就是:人工法,有何方法可以達到這樣的目的? (使得萬一出題老師心情不好,範圍縮小的時候,也不會就直接GG了。) 續本文前段所敘,顯而易見地,如果我們希望分母最大項越小越好的話, 即是可能地將 n^2 的拆解越平均地分散為兩部分,即:儘量離n近一點的因數。 當然,因為a,b必須不同,所以不能就取(n,n)。 每做一次這樣的動作,就會多分一沱出來,分了夠多次後,就有十沱了。 途中會有一些野手選擇要做,避免最後有相同的數留下。 按照這個原則,可以將最大值簡單地做一點控制,比方說下面這個流程: (每一個數,都是代表一個倒數,為了符號簡潔,所以簡化之。  配合基本的一些心算,可得出下表。) 2 -> 3 -> 4 -> 5 -> 20 12 6 -> 10 -> 14 35 15 ------------------------------------------------------------------- 3 -> 4 12 -> 21 28 ------------------------------------------------------------------- 6 =============================================================== Code, debug了一些地方,未用Sfly所提及的質因數條件, 運算速度結果還是跟Sfly的八分鐘有一大段不小的差距就是了。 Clear["Global`*"] numberofloop = 10 now := numberofloop endnumber := 99 solution = 0 sup = Array[endnumber &, numberofloop] inf = Array[numberofloop + 2 - # &, numberofloop] counter = 0 vari = Array[numberofloop + 2 - # &, numberofloop + 1] recurrence[ now_] := (For[vari[[now]] = inf[[now]], vari[[now]] <= sup[[now]], vari[[now]]++, (*Print["vari[[now]]",now,":",vari[[now]],",",IntegerPart[now/(1- Sum[1/vari[[i]],{i,now+1,numberofloop}])]]*) (*If[now==1,Print[endnumber-Sum[vari[[i]],{i,1,numberofloop}], vari];*) (*Print["now=",now,",vari=",vari];*) If[now >= 2 , If[Sum[1/vari[[i]], {i, now, numberofloop}] == 1, vari[[now]]++]; (*If[now==1,Print[Take[vari,numberofloop]]];*) sup[[now - 1]] = Min[endnumber, IntegerPart[(now - 1)/(1 - Sum[1/vari[[i]], {i, now, numberofloop}])]]; inf[[now - 1]] = Max[vari[[now]] + 1, IntegerPart[1/(1 - Sum[1/vari[[i]], {i, now, numberofloop}])]];] If[now == 1, If[Sum[1/vari[[i]], {i, now, numberofloop}] == 1, Print["解:", Take[vari, numberofloop]]; solution++]; (*Print[vari];*) counter++, recurrence[now - 1]]]) recurrence[now] Print["共跑", counter, "組"] Print["共有", solution, "組解"] -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 182.235.189.13

12/19 15:19, , 1F
12/19 15:19, 1F
文章代碼(AID): #1ExbyX5Z (Math)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 7 之 20 篇):
中學
0
1
中學
1
4
中學
0
4
中學
6
10
中學
1
1
中學
中學
9
15
中學
1
2
中學
中學
1
1
文章代碼(AID): #1ExbyX5Z (Math)