Re: [中學] 數論
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
中學
完整討論串 (本文為第 7 之 20 篇):
中學
0
1
中學
1
4
中學
0
4
中學
6
10
中學
1
1
中學
中學
9
15
中學
1
2
中學
1
1