算法性能比较(一)——找出小于等于n的所有素数
2018-02-06 21:51
453 查看
算法性能比较系列文章主要用于记录笔者刷题时自己写的算法与最佳算法之间的性能比较。
计算素数一般会用下面这样的算法:
在笔者的电脑上用时如下(浏览器版本:chrome 64.0.3282.140(正式版本) (64 位)):
![](https://oscdn.geek-share.com/Uploads/Images/Content/201802/06/64ef097888e691f8b9544b3a8e201752)
然后来瞻仰一下大佬的算法:
在笔者的电脑上用时如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201802/06/46549e3083098cfe3d4898d17a43fc8e)
第一种算法的时间主要消耗在了isPrimeNum函数里,里面包含了大量的无用计算。
两种思路对应的算法,性能相差了15倍,只能说脑子是个好东西,你值得拥有。
计算素数一般会用下面这样的算法:
function isPrimeNum(num) { for (let i = 2; i <= Math.sqrt(num); i++) { if (num%i === 0){ return false; } } return true; } function count(max) { let num = 2; let primeList = []; let start = (new Date()).valueOf(); while (num <= max) { if (isPrimeNum(num)) { primeList.push(num); } num++; } let end = (new Date()).valueOf(); console.log("num is " + primeList.length + " used time is " + (end - start)); } count(10000000);
在笔者的电脑上用时如下(浏览器版本:chrome 64.0.3282.140(正式版本) (64 位)):
然后来瞻仰一下大佬的算法:
function countFast(max) { var array = new Array(max); let primeList = []; let start = (new Date()).valueOf(); for (var j = 2; j < Math.sqrt(max); j++) { for (var i = j * j; i < max; i += j) { array[i] = true; } } for (var k = 2; k < max; k++) { if (!array[k]) primeList.push(k); } let end = (new Date()).valueOf(); console.log("num is " + primeList.length + " used time is " + (end - start)); } countFast(10000000);
在笔者的电脑上用时如下:
第一种算法的时间主要消耗在了isPrimeNum函数里,里面包含了大量的无用计算。
两种思路对应的算法,性能相差了15倍,只能说脑子是个好东西,你值得拥有。
相关文章推荐
- 输出所有小于等于n的素数(要求1)每行输出10个(要求2)较优的算法
- 有100W个关键字,长度小于等于50字节。用高效的算法找出top10的热词,并对内存的占用不超过1MB。
- c语言:实现对于给定的正整数N,依次打印出小于等于N的所有素数。两种方法及其优化
- 经典算法题之求小于N的所有素数
- 找出乘积等于2014的所有小于100的两个数
- 算法题27 在一个int数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数。
- 在一个数组中,找出所有这样的数a[i],其左边的数都小于等于它,右边的数都大于等于它
- 百度三面:找出数组中所有这样的数,大于等于左边的所有数,小于等于右边的所有的数
- 算法性能比较(二)——找出特殊的奇偶数
- 小于等于100内的所有素数(学习笔记)
- c语言:实现对于给定的正整数N,依次打印出小于等于N的所有素数。两种方法及其优化
- 编写算法输出从n个数中取k个(k小于等于n)的所有组合
- 微软等数据结构+算法面试100题(9)--在一个int 数组里查找这样的数,它大于等于左侧所有数,小于等于右侧所有数。
- 用户输入一个整数,然后显示所有小于或等于该数的素数!
- [素数]:编写函数,求出小于或等于lim的所有素数,并放在aa数组中,函数返回所求的素数个数。
- 编写函数int fun(int lim,int aa[100]),该函数的功能是求出小于或等于lim 的所有素数并放在aa数组中,该函数返回所求的素数的个数?
- 20171207编写一个程序,只接受正整数的输入,然后显示所有小于或等于该数的素数。
- 创建独立线程来输出小于或等于用户输入数的所有素数
- e的n次方计算 这个算法 只在算x小于等于16的时候比较准确
- C primer plus 第七章 练习9: 编写一个程序,接受一个整数输入,然后显示所有小于或等于该数的素数。