古代數學鉅著《九章算數》中有這麼一道題叫 “五家共井,甲二綆(汲水用的井繩)不足,如(接上)乙一綆;乙三綆不足,如丙一綆;
丙四綆不足,如丁一綆;丁五綆不足,如戊一綆;戊六綆不足,如甲一綆,皆及。
意思就是説五家人共用一口井,甲家的繩子用兩條不夠,還要再用乙家的繩子一條才能打到井水;乙家的繩子用三條不夠,還要再用丙家的繩子
一條才能打到井水;丙家的繩子用四條不夠,還要再用丁家的繩子一條才能打到井水;丁家的繩子用五條不夠,還要再用戊家的繩子一條才能打
到井水;戊家的繩子用六條不夠,還要再用甲家的繩子一條才能打到井水。
最後問:井有多深?每家的繩子各有多長?
 
分析:同樣這套題也是屬於不定方程,拿這個題目的目地就是讓大家能夠在不定方程組這種範疇問題上做到 “舉一反三”,根據題意
我們設井深為 h,各家分別為 a,b,c,d,e,則可以列出如下方程組:
2a+b=h   ①
3b+c=h   ②
4c+d=h   ③
5d+e=h   ④
6e+a=h   ⑤
首先我們看下普通青年的想法,他們的想法是找 a,b,c,d,e 之間的對應關係。
依次將②代入①,③代入②,④代入③,⑤代入④可得如下方程組:
a=b+c/2
b=c+d/3
c=d+e/4
d=e+a/5
從計算機的角度來説,我不希望有小數的出現,所以我可推斷: c 一定是 2 的倍數,d 一定是 3 的倍數,e 一定是 4 的倍數,a 一定是 5 的倍數,根據這種關係我們
就可以有如下程式碼:

1 namespace Test
2 {
3 class Program
4 {
5 static void Main(string[] args)
6 {
7 int a, b, c, d, e, h;
8
9 a = b = c = d = e = h = 0;
10
11 bool flag = true;
12
13 while (flag)
14 {
15 //4 的倍數
16 e += 4;
17
18 a = 0;
19
20 while (flag)
21 {
22 //5 的倍數
23 a += 5;
24
25 d = e + a / 5;
26
27 c = d + e / 4;
28
29 if (c % 2 != 0)
30 continue;
31
32 if (d % 3 != 0)
33 continue;
34
35 b = c + d / 3;
36
37 if (b + c / 2 < a) 38 break; 39 40 if (b + c / 2 == a) 41 flag = false; 42 } 43 } 44 45 h = 2 * a + b; 46 47 Console.WriteLine("a={0},b={1},c={2},d={3},e={4} ------h={5}n", a, b, c, d, e, h); 48 49 Console.Read(); 50 } 51 } 52 } 同樣我們的時間複雜度是O(N2),急需優化。   我們再來看看文藝青年的想法,他們的想法是找a,b,c,d,e中的某個數與h的對應關係。 比如我就找c與h的對應關係,上面的①②③④⑤可寫成如下方程組: b=h-2a   ⑥ c=h-3b   ⑦ d=h-4c   ⑧ e=h-5d   ⑨ a=h-6e   ⑩ 將⑥,⑧,⑨,⑩分別代入⑦,一陣痙攣後可知: c=(148/721)h 上面的公式也就表明了c和h的比例關係,我們令 h=721k, 則 c=148k,將其代入⑥,⑦,⑧,⑨,⑩可得如下方程組 a=265k b=191k c=148k d=129k e=76k x=721k 又因為k>0,所以題目有無數個解。這裏我就取 0