看看最大公约数、最小公倍数的图像


早上有人咨询怎么用python计算最大公约数,正好上午看到了一些频谱的文章,我突然想看看把最大公约数画成图什么样子,顺便再看看最小公倍数的。

想到就做,相关设定如下:

一、定义直角整数坐标系第一象限的值

  1. 坐标(i,j)的值对应其最大公约数
  2. 坐标轴I、J上的值为坐标值本身
  3. RGB值中,R即为公约数本身,G为2倍,B为3倍
  4. 最终,将RGB三值各自相对于255取模

 

二、最大公约数图像

即右侧图像,挺好看的。
 

三、python代码

四、最小公倍数图像

为了防止计算lcm中,原点位置出现除零错误,直接定义此时的分母为1
则图像如右:

作者: Leniy

Do not , for one repulse , give up the purpose that you resolved to effect .

本文著作版权归Leniy所有,并受法律保护。

转载、使用整体或任何部分的内容(包含但不限于各个页面的标题、评论框提示语)须经过Leniy的授权。

CopyRight © 2006-2017 Leniy.org all rights reserved.

16 thoughts on “看看最大公约数、最小公倍数的图像

  1. Vespa

    之前画过互质数的表,也是这种发散性的图形。。【数论里面感觉都是这个形状的。。】

  2. 老蔡

    有意思,可以从第一张图里面直觉看出y=1/3 x,y=1/2 x,y=x,y=2x,y=3x几条直线。最小公倍数这个就比较有趣了,我用你的代码作了个3500*3500的图,发现图像每个小模块的循环组成一个大模块的循环,大模块的循环又组成一个更大的模块的循环。

    • Leniy

      图太大了,代码也没有优化,结果之前写代码时只分别还实验了3500和35000的矩阵,再大的幅度就死机了,不知道到了后面是不是还会嵌套循环。

    • 老蔡

      35000×35000的矩阵有1.14G个点,加脚本损耗,大概是32位机器内存撑死了吧。

    • Leniy

      恩,全往内存里写的话,机器绝对爆掉啊。毕竟没有优化,一个一个点的绘制,效率太差了。

  3. liuning8023

    PIL 是不是 python 自带的吧,最新是运行在 paython 2.7 的,怎么也的提示一下运行这段代码的 python 版本,3.3 的不行。paython 从 3.0 开始的版本,之前的版本差异很大。

    • Leniy

      我用的2.7版本,PIL一般处理图形都会安装的。3.0完全没接触过,对于scipy、numpy和matplotlib什么的结合还是不行啊

  4. liuning8023

    缩进啊,python 对缩进,书写习惯有控制,彪到网页的代码,格式变化了,直接提供 py 文件,方便点

    • Leniy

      点击第一行上面的复制图标,就可以复制原始的了,缩进仍然保留。

      或者点击下面的图片的链接,去下载。

      我没有保留原始py文件。

发表评论

电子邮件地址不会被公开。 必填项已用*标注