原创开源 VB 小程序: 质数判断(因数分解)

2014-9-7 P.S.更新 v3.5 版。(本文原发布日期为8月3日)

这是一个判断一正整数(1 除外)是否为质数的程序。

写这个程序缘由是有关参加本省数学竞赛的,即 2014 年湖南省高中数学竞赛中一道选择题中要判断 2011 是否为质数。虽然我当时就觉得是质数,但是仍不能确定,于是就产生了写程序求证的想法。想法很好,我有时候就是缺想法。本着脚踏实地从基层干起,将基本数学方法编程的理念,我写了这个程序。前后共有 3 个版本。原来一个看似简单的程序也并不简单,或许是我有点晕影响了智力发挥?

v1.0

质数判断 v1.0 界面

这是最初的版本。

我考虑到要判断一个数 n 是否为质数,只需看没有还是有两个因数 a,b 相乘等于 n 就行了。我设了两个变量,并且很“聪明”地设定循环使 2≤a≤根号n,然后嵌套循环内使 2≤a≤n/a;但是我当时显然没有意识到,有一种更快更简单的方法能让我避免如此繁冗计算“趋近” n 的。

质数判断 v1.0 的错误界面

这样造成,程序运行得很费劲;更糟糕的是,n 的范围被限制得致命地小!(不能超过 65533!)

下载地址:https://github.com/shansing/pnj/archive/v1.0.zip 【是的,此项目托管在 GitHub 了(主页在这儿,似乎让 GitHub 大材小用了。】

v2.0

质数判断 v2.0 界面

还好,之后我意识到了所犯错误,于是修改了算法;第二版诞生了。

显然,要找出假定的两个正整数 a,b 使得 a*b=n,只要设定循环使 2≤a≤根号n,再令 b=n/a 判断 b 是整数与否就好了。

改进之后,速度有了大幅提升。n 的支持的范围也更广了;不过它受到 VB 的限制,精确的话只支持 15 位及以内的整数——但这相比前一版,显然也是个飞跃了。这一版的 BUG 是,n 很大时,进度条会出现问题。

下载地址:https://github.com/shansing/pnj/archive/v2.0.zip

v3.0

质数判断 v3.0 界面

我当时也没想到会有这第三版。

不久我发现,输出结果太繁琐,不如写成一个 n 等于其所有质因数之积的等式。于是,“质数判断”实际上变成了“因数分解”。

在核心算法没变的基础上,此程序的处理速度居然也大幅提升了,这又给了我一个启示。

下载地址:https://github.com/shansing/pnj/archive/v3.0.zip

v3.5

质数判断 v3.5 界面

再不久,我又发现,将窗口最小化时程序处理得要快很多。经探究,此乃进度条绘制的问题。于是重写之,速度当即大幅提升。顺便还调整了一下界面布局。

因为没有改动核心算法,故不增加主版本号。

下载地址:https://github.com/shansing/pnj/archive/v3.5.zip

关于因数分解

这个程序的算法显然最多只算得上是中学水平。对于大整数的因数分解,还有更加高级好用的算法呢。详见维基百科整数分解词条。

关于我与 VB6

又显然,VB6 在当今时代显得有些“日薄西山”了。因而我也正在寻找其替代品。

我找到了快手(AAuto)。它像 VB 一样轻巧,有着与 VB 相似的代码风格,但更加灵活:我相信它绝对不会只是个替代品。其作者系国人,AAuto 是免费开源的,使用它也符合我的理想宗旨。于是我准备要学习 AAuto 了

我的 VB 程序中还有一个大作(误)叫“教室小管家”,找个时间将它发布了吧。VB 生涯该结束了。

插话一句:图片的位置问题留待稍候解决,造成的不便敬请谅解。

后续文章:质数判断 控制台版 (aardio 小程序)

若无特别说明,本文系原创,遵循 署名-非商业性使用 3.0 (CC BY-NC 3.0) 协议,转载文章请注明来自【闪星空间】,或链接上原文地址:http://shansing.com/read/360/

13 条评论

  1. Wis Wis

    一看就很高端嘛~

  2. 话说这个程序我也写过但是算法太烂

    1. 不妨也分享一下。。

      1. http://blog.chenyuheng.cn/305.cyh

  3. 哈哈..求破解RSA 1024bit
    话说新风格高端炫酷啊

    1. 768 位的已经倒下了,1024 位的也快到岌岌可危的地步了。
      感谢夸奖,要的就是这种效果哈哈。

  4. 围观博主,哇哈哈

  5. VB大神~

  6. 给力的哈,vb!

  7. = =AAuto只是免费,不开源的哟

  8. 你也真是蛋疼...

发表评论»

NO SPAMS! 不要发垃圾评论哦!

表情