|
本帖适合VBA的初级、中级水平爱好者。
很多业余爱好者,都是从录制宏开始的。
一开始,录制简单宏就可以让Excel做一些繁琐的重复操作,节省了人力,提高了效率。
然而往往录制宏并不是那么聪明,于是产生了各种自己修改代码参数(单元格地址、操作行数、列数等。)的要求。
这以后越走越远,逐步深入到VBA代码中去,
开始学习使用For……Next循环,
然后是Do……Loop不定循环,
…………
然后开始引入【VBA中数组】的概念,大大提高了读写的效率。
其实,学会使用数组,把工作表区域读入二维数组,以及自定义一维数组、多维数组……
这已经是一个了不起的进步了,宏代码的速度也会大大提高。
…………
但是,仅仅到这里,还远远不够……
往往对于复杂要求的计算,或者大数据的反复循环运算,一般爱好者的代码,
比起高手编写的代码,运行速度效率要差(慢)几倍甚至几十倍、几百倍。
虽然新手自己的代码能够达到目的,而且一般使用上的速度差异也不会带来太大的影响……
(比如你的代码运行5-10秒,高手的代码0.02秒就完成,虽然速度差很多,但实际耗时影响并不大)
但是,作为一个有上进心的VBA爱好者,在满足工作目标的基础上,自己努力进一步提高代码效率,
也应该是大家都梦想得到的好事。
…………
然而,有时候十个人写代码就会有十种版本,原因在于大家大都是业余爱好而已,
不是按照正规编程教材教出来的,在学习进步过程中,很多都是靠自己学习和感悟,
所以有差异在所难免。
…………
本帖仅仅希望得到如下目的:
① 介绍一些算法效率改进的小知识,积少成多,逐步改善自己的能力。
② 陪伴大家对VBA算法进行一些基础研究,在研究过程中产生乐趣。
另外,我想强调的是:
各人有各人的风格,尤其是,实际工作生活中,适合自己的才是最好的。
所以,我并不想把自己的想法、做法强加给你,
只是希望通过代码的思路介绍,尽量给大家一些学习参考。
…………
呵呵,言归正传,说一下本帖的问题:
【问题】
已知1个正整数n,问1-n范围内有多少个素数?并列出范围内全部素数。
…………
【问题的数学背景】
任何一个正整数N,按照因素分解结果,可以分成二大类:
① 素数或质数: 除了1和自身以外,不能被其它任何整数X整除。(即 Mod(N,X)<>0)
例如: 1、2、3、5、7、11、13、17、19、23
② 合数或非质数:可以被其它除了1以外的、小于自身的整数Y整除。即,Mod(N,Y)=0 且Y范围为:(1,n)
也可以更加明确的表达为:N=Y1*Y2*……Yk
举例: 6=2*3、9=3*3、12345=3*5*823、1111111=239*4649
…………
就是这么简单、就是这么任性!
|
评分
-
19
查看全部评分
-
|