23 Aug

从费马大定理谈起(七):费马平方和定理

本想着开始准备n=3的证明,但这需要引入Eisenstein整数的概念,而我们已经引入了高斯整数,高斯整数的美妙还没有很好地展示给读者。从n=4的两个证明可以知道,引入高斯整数的作用,是把诸如$z^n-y^n$的式子进行完全分解。然而,这一点并没有给我们展示多少高斯整数的神奇。读者或许已经知道,复分析中很多简单的结果,如果单纯用实数描述出来,便会给人巧夺天工的感觉,在涉及到高斯整数的数论中也是一样。本文就让我们来思考费马平方和定理,以此再领会在高斯整数中处理某些数论问题时的便捷。——我们从费马大定理谈起,但又并不仅仅只谈费马大定理。

费马平方和定理:奇素数$p$可以表示为两个整数的平方和,当且仅当该素数具有$4k+1$的形式,而且不考虑相加顺序的情况下,表示法是唯一的。

点击阅读全文...

28 Aug

让风筝飞

最近的很多篇文章都是数论内容,属于纯数学的范畴了,对于很多只爱好物理或应用数学的读者可能会看得头晕了。今天我们来谈些不那么抽象的东西,我们来谈谈风筝,并来分析一下风筝的飞行力学

爱情就像放风筝,线不能来得太紧,也不能拉得太松,你只会给对方飞翔的空间,他/她始终会回到你身边,因为有一条线系着双方。

放风筝(来自互联网)

放风筝(来自互联网)

风筝,在我们这个地方叫做纸鸢,相信大家童年时一定会放过。笔者小时候放风筝时,已经是小学五年级之前的事了。这个暑假突然童心一起,凭着小时候的回忆,简单做了个风筝来玩,居然真的飞起来了!兴奋之余,与大家分享一下。如今再来放风筝,真心感觉到放风筝也有很多技巧,让风筝飞,还不是件容易的事情呢,真可谓人生处处皆学问呀。上面关于风筝的比喻,正是放风筝的真实写照吧。

风筝可以说是人类摆脱地球重力的最原始尝试吧,跟发射宇宙飞船的火箭不同,风筝是借助风力来抵抗重力,严格来讲,即便是现在的飞机,也离不开这个原理(我们最后会谈到)。简单来讲,风筝就是用轻的支架撑开一个轻盈的平面,然后系上一个线圈。我们简单做一个风筝,只需要一张报纸,两条竹篾和一点透明胶,十分钟内就可以完成一个。当然,现在已经有各种各样的好看的风筝,甚至还有龙形的风筝,但是,自己动手简单做一个风筝,还是相当好玩的。

风筝自然是借助风力飞起来的,可是为什么风筝得用绳子牵着才能飞得更高、绳断了反而掉下来?风大多时,才适合放风筝?飞机又是怎么飞起来的?下面我们试着分析这些问题。

点击阅读全文...

1 Oct

几个有关集合势的“简单”证明

我们这学期开设《实变函数》的课程,实变函数的第一章是集合。关于无穷集合的势,有很多异于直觉的结论。这些结论的证明技巧,正是集合论的核心方法。然而,我发现虽然很多结论跟我们的直觉相违背,但是仔细回想,它又没我们想象中那样“离谱”。而我们目前使用的教科书《实变函数论与泛函分析》(曹广福),却没有使用看来简单的证明,反而用一些相对复杂的定理,给人故弄玄虚的感觉。

一、全体实数不能跟全体正整数一一对应

这是集合论中的基本结论之一。证明很简单,如果全体实数可以跟全体正整数一一对应,那么$(0,1)$上的实数就可以跟全体正整数一一对应,把$(0,1)$上的全体实数表示为没有0做循环节的无限小数(比如0.1表示为0.0999...),那么设一种对应为:
$$\begin{aligned}&a_1=0.a_{11} a_{12} a_{13} a_{14}\dots\\
&a_2=0.a_{21} a_{22} a_{23} a_{24}\dots\\
&a_3=0.a_{31} a_{32} a_{33} a_{34}\dots\\
&\dots\dots
\end{aligned}$$

点击阅读全文...

7 Oct

班门弄斧:Python的代码能有多简洁?

此文很水,高手略过...

Python以它的开发效率而闻名,优秀的开发效率自然意味着它能够用更少的代码实现更多的功能。那么,对于同一个问题,Python的代码能有多简洁?而我们怎么平衡开发效率和运行效率?笔者学了几个月Python,略懂一点,在此班门弄斧一翻。

在此,我们来编程计算
$$\sum_{n=0}^{10} n^2$$
这当然是一道非常简单的习题。按照一般思路,写出来的最自然的代码就是:

s=0
for i in range(11):
    s = s + i**2

print(s)

点击阅读全文...

22 Sep

实数集到无理数集的双射

集合论的结果告诉我们,全体实数的集合$\mathbb{R}$跟全体无理数的集合$\mathbb{R} \backslash \mathbb{Q}$是等势的,那么,如何构造出它们俩之间的一个双射出来呢?这是一个颇考读者想象力的问题。当然,如果把答案给出来,又似乎显得没有那么神秘。下面给出笔者构造的一个例子,读者可以从中看到这种映射是怎么构造的。

为了构造这样的双射,一个很自然的想法是,让全体有理数和部分无理数在它们自身内相互映射,剩下的无理数则恒等映射。构造这样的一个双射首先得找出一个函数,它的值只会是无理数。要找到这样的函数并不难,比如我们知道:

1、方程$x^4 + 1 = y^2$没有除$x=0,y=\pm 1$外的有理点,否则将与费马大定理$n=4$时的结果矛盾。

2、无理数的平方根依然是无理数。

根据这些信息,足以构造一个正实数$\mathbb{R}^+$到正无理数$\mathbb{R}^+ \backslash \mathbb{Q}^+$的双射,然后稍微修改一下,就可以得到$\mathbb{R}$到$\mathbb{R} \backslash \mathbb{Q}$的双射。

点击阅读全文...

16 Sep

生成函数法与整数的分拆

我们在高中甚至初中,都有可能遇到这样的题目:

设$x,y,z$是非负整数,问$x+y+z=2014$有多少组不同的解?(不同顺序视为不同的解)

难度稍高点,可以改为

设$x,y,z$是非负整数,$0\leq x\leq y\leq z$,问$x+y+z=2014$有多少组不同的解?

这些问题都属于整数的分拆问题(广为流传的哥德巴赫猜想也是一个整数分拆问题)。有很多不同的思路可以求解这两道题,然而,个人认为这些方法中最引人入胜的(可能也是最有力的)首推“生成函数法”。

关于生成函数,本节就不多作介绍了,如果缺乏相关基础的朋友,请先阅读相关资料了解该方法。不少数论的、离散数学的、计算机科学的书籍中,都介绍了生成函数法(也叫母函数法)。本质上讲,母函数法能有诸多应用,是因为$x^a\times x^b=x^{a+b}$这一性质的成立。

点击阅读全文...

21 Jan

怎么会这么巧!背后的隐藏信息

假设我是一名中学数学老师,在给学生兴致勃勃地讲“素数”,讲完素数的定义和相关性质后,正当我接着往下讲时,有个捣蛋的学生提问,“老师,你能不能举一个三位数的素数?”。可是我手头上没有1000以内的素数表,我也没记住超过100的素数,那怎么办呢?我只好在黑板上写出几个三位数,比如173、211、463,然后跟学生说“让我们来检验这些数是不是素数”。最终的结果是:它们都是素数!然后会有学生疑问:怎么会这么巧?

素数的概率

首先的问题是,任意写一个三位数,它是素数的概率是多少?三位数的素数共有143个,三位数共有900个,于是概率应该是143/900,大约是六分之一。看起来挺低的,要“蒙中”似乎不容易。

点击阅读全文...

28 Oct

在Python中使用GMP(gmpy2)

之前笔者曾写过《初试在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

点击阅读全文...