两百万素数之和与“电脑病”
By 苏剑林 | 2014-10-17 | 15415位读者 | 引用原则上来讲,同样的算法,如果分别在Python和C++上实现,那么Python的速度肯定比不上C++的。但是Python还被称为“胶水语言”,它允许我们把主要计算的部分用C或C++等高效的语言编写好,然后它作为“粘合剂”把两者粘合在一起。正因为如此,Python才有了各种各样的扩展库,这些库中有不少是用C语言编写的。因此,我们在编写Python程序的时候,如果可以用这些现成的库,速度会快很多。本文就是用Numpy来改进之前的《两百万前素数之和与前两百万素数之和》的计算。
算法本身是没有变的,只是用了Numpy来处理数组计算,代码如下:
从费马大定理谈起(十一):有理点与切割线法
By 苏剑林 | 2014-10-24 | 26537位读者 | 引用我们在这个系列的文章之中,探索了一些有关环和域的基本知识,并用整环以及唯一分解性定理证明了费马大定理在n=3和n=4时的情形。使用高斯整数环或者艾森斯坦整数环的相关知识,相对而言是属于近代的比较“高端”的代数内容(高斯生于1777年,艾森斯坦生于1823年,然而艾森斯坦英年早逝,只活到了1852年,高斯还活到了1855年。)。如果“顺利”的话,我们可以用这些“高端”的工具证明解的不存在性,或者求出通解(如果有解的话)。
然而,对于初等数论来讲,复数环和域的知识的门槛还是有点高了。其次,环和域是一个比较“强”的工具。这里的“强”有点“强势”的意味,是指这样的意思:如果它成功的话,它能够“一举破城”,把通解都求出来(或者证明解的不存在);如果它不成功的话,那么往往就连一点非平凡的解都求不出来。可是,有些问题是求出一部分解都已经很困难了,更不用说求出通解了(我们以后在研究$x^4+y^4 = z^4 + w^4 $的整数解的时候,就能深刻体会这点。)。因此,对于这些问题,单纯用环域的思想,很难给予我们(至少一部分)解。(当然,问题是如何才算是“单纯”,这也很难界定。这里的评论是比较粗糙的。)
从费马大定理谈起(十二):再谈谈切线法
By 苏剑林 | 2014-10-25 | 25328位读者 | 引用首先谈点题外话,关于本系列以及本博客的写作。其实本博客的写作内容,代表了笔者在这段时间附近的研究成果。也就是说,我此时在写这篇文章,其实表明我这段时间正在研究这个问题。而接下来的研究是否有结果,有怎样的结果,则是完全不知道的。所以,我在写这篇文章的时候,并不确定下一篇文章会写些什么。有些类似的话题,我会放在同一个系列去写。但不管怎样,这些文章可能并不遵循常规的教学或者学习思路,有些内容还可能与主流的思想方法有相当出入,请读者见谅,望大家继续支持!
上一篇我们谈到了切线法来求二次和三次曲线的有理点。切线法在寻找不高于三次的曲线上的有理点是很成功的,可是对于更高次的曲线有没有类似的方法呢?换句话说,有没有推广的可能性。我们从纯代数的角度来回复一下切线法生效的原因。切线法,更一般的是割线法,能够起作用,主要是因为如果有理系数的三次方程有两个有理数的根,那么第三个根肯定是有理数。如果只有一个已知的有理根,那么就可以让两个根重合为已知的那个根,从而割线变成了切线。
在Python中使用GMP(gmpy2)
By 苏剑林 | 2014-10-28 | 66978位读者 | 引用之前笔者曾写过《初试在Python中使用PARI/GP》,简单介绍了一下在Python中调用PARI/GP的方法。PARI/GP是一个比较强大的数论库,“针对数论中的快速计算(大数分解,代数数论,椭圆曲线...)而设计”,它既可以被C/C++或Python之类的编程语言调用,而且它本身又是一种自成一体的脚本语言。而如果仅仅需要高精度的大数运算功能,那么GMP似乎更满足我们的需求。
了解C/C++的读者都会知道GMP(全称是GNU Multiple Precision Arithmetic Library,即GNU高精度算术运算库),它是一个开源的高精度运算库,其中不但有普通的整数、实数、浮点数的高精度运算,还有随机数生成,尤其是提供了非常完备的数论中的运算接口,比如Miller-Rabin素数测试算法、大素数生成、欧几里德算法、求域中元素的逆、Jacobi符号、legendre符号等[来源]。虽然在C/C++中调用GMP并不算复杂,但是如果能在以高开发效率著称的Python中使用GMP,那么无疑是一件快事。这正是本文要说的gmpy2。
只有两个四阶群和六阶群
By 苏剑林 | 2014-10-30 | 72424位读者 | 引用我们上近世代数课的时候,老师谈到在同构意义之下只有两个不同的四阶群,六阶群也是只有两个,还说到这是代数的研究生入学考试题目。说到这样了,我就饶有兴致地研究了一下,发现只有两个互不同构的四阶群这几乎是显然的,感觉这题用来做研究生考试题太水了吧?接着分析了一下六阶的情况,发现复杂了不少(元素增加)。而今天在实变函数课的时候,想到了一个简化的技巧,遂也证明了只有两个互不同构的六阶群。把结果和研究过程贴在这里,与大家分享。
两个四阶群
不管是四阶群还是六阶群,它们都是有限群。有限群的一个特点就是,可以把它们的乘法表写出来(只要不怕麻烦~~)。既然要研究四阶群的数目,我们只需要列出四阶群的乘法表就行了。设四阶群为$G_4=\{e, a, b, c\}$,其中$e$是单位元,根据这些信息,我们至少可以写出乘法表的一部分:
$$\begin{array}{c|cccc}
\cdot & e & a & b & c \\
\hline
e & e &a &b &c \\
a & a & & & \\
b & b & & & \\
c & c & & & \end{array}$$
实数域上有限维可除代数只有四种
By 苏剑林 | 2014-11-12 | 65000位读者 | 引用今天上近世代数课,老师谈到除环,举了一个非交换的除环的粒子,也就是四元数环,然后谈到“实数域上有限维可除代数只有4种”,也就是实数本身、复数、四元数和八元数(这里的可除代数就是除环)。这句话我听起来有点熟悉,又好像不大对劲。我记得在某本书上看过,定义为实数上的超复数系,如果满足模的积性,那么就只有以上四种。但是老师的那句话表明即使去掉模的积性,也只有四种。我自然以为老师记错了,跟老师辩论了一翻,然后回到宿舍又找资料,最终确定:实数域上有限维可除代数真的只有四种!下面简单谈谈我对这个问题的认识。
当然,这里不可能给出这个命题的证明,因为这个证明相当不简单,笔者目前也没有弄懂,但是粗略感觉一下为什么,还是有可能的。看到这个命题,我们一下子的感觉可能是:怎么会这么少!我们这里通过例子简单说明一下,确实不会多!
我们已经对复数系很熟悉了,也就是定义在实数上的向量空间,基为$\{1,i\}$,并且给定乘法为
$$1\times i=i \times 1=i,\quad 1^2=1,\quad i^2=-1$$
特殊的通项公式:二次非线性递推
By 苏剑林 | 2014-11-12 | 62119位读者 | 引用特殊的通项公式
对数学或编程感兴趣的读者,相信都已经很熟悉斐波那契数列了
0, 1, 1, 2, 3, 5, 8, 13, ...
它是由
$$a_{n+2}=a_{n+1}+a_n,\quad a_0=0,a_1=1$$
递推所得。读者或许已经见过它的通项公式
$$a_{n}=\frac{\sqrt{5}}{5} \cdot \left[\left(\frac{1 + \sqrt{5}}{2}\right)^{n} - \left(\frac{1 - \sqrt{5}}{2}\right)^{n}\right]$$
这里假设我们没有如此高的智商可以求出这个复杂的表达式出来,但是我们通过研究数列发现,这个数列越来越大时,相邻两项趋于一个常数,这个常数也就是(假设我们只发现了后面的数值,并没有前面的根式)
$$\beta=\frac{1 + \sqrt{5}}{2}=1.61803398\dots$$
Designing GANs:又一个GAN生产车间
By 苏剑林 | 2020-02-13 | 33425位读者 | 引用在2018年的文章里《f-GAN简介:GAN模型的生产车间》笔者介绍了f-GAN,并评价其为GAN模型的“生产车间”,顾名思义,这是指它能按照固定的流程构造出很多不同形式的GAN模型来。前几天在arxiv上看到了新出的一篇论文《Designing GANs: A Likelihood Ratio Approach》(后面简称Designing GANs或原论文),发现它在做跟f-GAN同样的事情,但走的是一条截然不同的路(不过最后其实是殊途同归),整篇论文颇有意思,遂在此分享一番。
f-GAN回顾
从《f-GAN简介:GAN模型的生产车间》中我们可以知道,f-GAN的首要步骤是找到满足如下条件的函数$f$:
1、$f$是非负实数到实数的映射($\mathbb{R}^* \to \mathbb{R}$);
2、$f(1)=0$;
3、$f$是凸函数。
最近评论