勾股数的通解及其推广
By 苏剑林 | 2014-07-01 | 21326位读者 | 引用在之前的文章《几何的数与数的几何:超复数的浅探究》中,我们谈及过四元数。四元数源于把复数的$|(a+bi)(c+di)|=|a+bi|\times|c+di|$这一独特的性质进行高维推广。为什么偏爱这一性质?读者或许已经初步知道一些用到复数的这一性质的例子,有几何方面的,也有物理方面的,这一性质为处理模长相关问题带来了美妙的方便。本文介绍它在求三元二次齐次不定方程的整数通解中的应用,这一例子同样展示了复数这一性质的神奇,让我们不得不认同当初哈密顿为了将其推广到高维而不惜耗费十年光阴的努力。
勾股数问题
读者或许已经知道,勾股数,也就是满足
$$x^2+y^2=z^2$$
的所有自然数解,由下面公式给出
$$x=a^2-b^2,\quad y=2ab,\quad z=a^2+b^2$$
简单做了个Logo~
By 苏剑林 | 2014-06-30 | 25916位读者 | 引用Project Euler 454 :五天攻下“擂台”
By 苏剑林 | 2014-06-27 | 28513位读者 | 引用进入期末了,很多同学都开始复习了,这学期我选的几门课到现在还不是很熟悉,本想也在趁着这段时间好好看看。偏生五天前我在浏览数学研发论坛的编程擂台时看到了这样的一道题目:
设对于给定的$L$,方程
$$\frac{1}{x}+\frac{1}{y}=\frac{1}{n}$$
满足$0 < x < y \leq L$的正整数解共有$f(L)$种情况。比如$f(6)=1,f(12)=3,f(1000)=1069$,求$f(10^{12})$。
这道题目的来源是Project Euler的第454题:Diophantine reciprocals III(丢潘图倒数方程),题目简短易懂,但又不失深度,正符合我对理想题目的定义。而且最近在学习Python学习得不亦乐乎,看到这道题目就跃跃欲试。于是乎,我的五天时间就没有了,而且过程中几乎耗尽了我现在懂的所有编程技巧。由于不断地测试运行,我的电脑发热量比平时大了几倍,真是辛苦了我的电脑。最后的代码,自我感觉已经是我目前写的最精彩的代码了。在此与大家共享和共勉~
上述表达式是分式,不利于编程,由于$n=\frac{xy}{x+y}$,于是上述题目也等价于求$(x+y)|xy$(意思是$x+y$整除$xy$)的整数解。
线性微分方程组:已知特解求通解
By 苏剑林 | 2014-06-18 | 37562位读者 | 引用含有$n$个一阶常微分方程的一阶常微分方程组
$$\dot{\boldsymbol{x}}=\boldsymbol{A}\boldsymbol{x}$$
其中$\boldsymbol{x}=(x_1(t),\dots,x_n(t))^{T}$为待求函数,而$\boldsymbol{A}=(a_{ij}(t))_{n\times n}$为已知的函数矩阵。现在已知该方程组的$n-1$个线性无关的特解$\boldsymbol{x}_1,\boldsymbol{x}_2,\dots,\boldsymbol{x}_{n-1}$(解的列向量),求方程的通解。
这是我的一位同学在6月5号问我的一道题目,我当时看了一下,感觉可以通过李对称的方法很容易把解构造出来,当晚就简单分析了一下,发现根据李对称的思想,由上面已知的信息确实足以把通解构造出来。但是我尝试了好几天,尝试了几何、代数等思想,都没有很好地构造出相应的正则变量出来,从而也没有写出它的显式解,于是就搁置下来了。今天再分析这道题目时,竟在无意之间构造出了让我比较满意的解来~
【备忘】访问Google的几个方式
By 苏剑林 | 2014-06-15 | 36314位读者 | 引用不多说了,我只想喊“无谷歌不搜索”!
用PyPy提高Python脚本执行效率
By 苏剑林 | 2014-06-11 | 23425位读者 | 引用在《两百万前素数之和与前两百万素数之和》中,我们用Python求了前两百万的素数和以及两百万前的素数和,并且得到了在Python 3.3中的执行时间如下:
两百万前的素数之和:
142913828922
time: 2.4048174478605646前两百万的素数之和:
31381137530481
time: 46.75734807838953
于是想办法提高python脚本的执行效率,我觉得在算法方面,优化空间已经比较小了,于是考虑执行器上的优化。在搜索的无意间我看到了一个名词——Psyco!这是python的一个外部模块,导入后可以加快.py脚本的执行。网上也有《用 Psyco 让 Python 运行得像 C一样快》、《利用 psyco 让 Python 程序执行更快》之类的文章,说明Psyco确实是一个可行的选择,于是就跃跃欲试了,后来了解到Psyco在2012年已经停止开发,只支持到Python 2.4版本,目前它由 PyPy所接替。于是我就下载了PyPy。
最近评论