编程之战第十二章 丢番图方程

来源:互联网 发布:反爆吧软件 编辑:程序博客网 时间:2024/06/05 05:26

在杨成的软磨硬泡,威逼利诱之下,“皮卡丘系统”终于作出决定,把杨成送到有海景的地方去看海。

古希腊亚历山大港,地中海气候给这里带来了丰沛的降水,这里尤其以盛产数学家和哲学家闻名,其中最富盛名的数学家自然包括丢番图。

海港边一座并不起眼的小茅屋,晚上睡在这里能听到海浪轻轻拍打礁石的声音,这里居住着年迈的丢番图和他的弟子。

“老师请用”,杨成用一个小碗装满煮沸的清水,递给一位老者。

老者年过八旬,唯一的儿子先他而去,所有的寄托就在这个弟子身上了。

丢番图喝了一小口清水,看着眼前这个弟子,眼中充满了慈爱。

“徒弟,为师今天要考考你,所学如何?”

“老师尽管吩咐”,杨成毕恭毕敬地侍立在一旁。

丢番图拿起一块松软的石膏,在墙壁上颤巍巍地一笔一划,写出一个方程式。

“已知x² - 4y² = nn为已知,则xy作何解?”

杨成看到这方程的第一眼,就明白老师的意思了,他这是在考自己如何求出正整数解来。

毕竟这个时代,还停留在正有理数求解阶段。

“你不要急着做,先慢慢想一下,老师先出去走走”,说完,丢番图拄着木杖,缓缓地出了门。

这是一个著名的丢番图方程,或者说是不定方程。

当杨成看到这个方程的左边x²- 4y²,他就有种感觉,它可以转化为(x - 2y) * (x + 2y),而且这必然是第一步。因为等式右边的常量N,它有可能是一个很大的数,如果用穷举法,效率是很低的。但可以尝试分解这个常量,把它因式分解成两项。

比方说,N=24,分解成两项有如下的可能:

[1,24] , [2,12] , [3,8] , [4,6]

拿这些可能的项往式子上套,便可得四个方程组:

x - 2y = 1

x + 2y = 24

--------------

x - 2y = 2

x + 2y = 12

--------------

x - 2y = 3

x + 2y = 8

--------------

x - 2y = 4

x + 2y = 6

这样就转化成了求四个二元一次方程。

最后,再选取其中的正整数解即可。

杨成调出系统编辑器,把这个求解过程写成了一个通用的函数,无论N是什么,都可以通过这个函数来求解。

墙壁上,丢番图所写的那个方程式慢慢地被金色的线条所环绕。

“叮!”,系统声音响起来。

“恭喜您完成了丢番图方程求解任务!”

“先前积分24分”。

“因式分解求丢番图方程奖励2分”。

“当前积分26分,击败了全球16%的玩家,请您再接再厉!”

“成哥好棒喔!”,“皮卡丘系统”谄媚地说着肉麻的话,浑然不顾自己GM的身份。

“少拍哥哥马屁了”,杨成白了系统一眼。

“真想帮哥哥做点实事的话”,杨成话锋一转,面露狡黠之色。

“给我安排个希腊妹子晚上过来耍耍啊!”

“呃~”,皮卡丘一时语塞。

“成哥,要不要继续来玩玩啊?”,这人工智能系统犹如皮条客般怂恿着杨成。

原创粉丝点击