写了个穷举逻辑,突然间对算法开始有些兴趣了

[软件开发] 季雨林 2023/3/19 10:59:45

算法这个词,听起来过于深奥,以至于每当我在计算机领域,听说数学,听说算法,都觉得有些离谱,要么是真大佬,要么是浑水摸鱼。

最近两天看了个帖子,说要写一段得到质数的算法,帖主很显然有个问题是:

//如果无法被 2,3,5,7 整除,则直接判断为质数

这里显然是个最大的bug,因为质数从来没有这种定义,所以很自然,我想到了穷举法,原本想到就那么回事了,可我这次偏偏真的动手写了下穷举质数的代码,代码量也不多,几十行的样子,然后我惊呆了,几个现象和结论:

  • 1,C#里直接使用了一个task,占用的是单线程,所以当前阶段的结论都是单核cpu的效率

  • 2,程序跑了24小时7分钟,已经穷举到12915559,得到的总质数数量是844127。

  • 3,我原本担心的常见类型最大值不够用,现在看来ulong已经可以让我现有程序跑很久了

  • 4,突然想到量子计算机,确实是一种另类计算机,对于现有认知范围的量子计算机,确实可以直接回避cpu的穷举效率短板。

所以,突然回到那个帖子的问题,虽然本身是问题,但改造下发现:通过简单粗暴的方式,这反而是一种二次过滤简化计算量的极佳做法!因为当得到质数开始增加,偶数确实不在可能作为质数的结尾。质数里除了2是个偶数,剩下的质数都是奇数。这就一下子砍掉了大约一半的计算量。


几个可行的后续改造点:

1,程序换用多线程设计,用满多个内核

2,使用偶数过滤下计算量,将计算量降低大约一半(其实即使不加这个处理,当检测到除以2的时候,也已经在最前面就排除了)



原文地址: https://www.opengps.cn/Blog/View.aspx?id=2042 文章的更新编辑依此链接为准。欢迎关注源站原创文章!

评论

暂无评论!

发表评论:

用于接收作者回复信息
点击更换验证码 - openGPS提示