这篇文章主要讲解了“javascript如何求素数”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript如何求素数”吧! 求素数的方法:1、遍历1~n区间中的所有自然数给n来除,若余数为0则表示该数n不是素数,否则就是素数,语法“for(i=2;i
该算法只能保证循环条件 i = i^2 = 9 时。大于等于5的素数一定和6的倍数相邻(注意这句话不等价于:和6的倍数相邻的数一定是大于5的素数,该结论不成立。)如上图中,将大于等于5的数分为了:6y-1、6y、6y+1、6y+2、6y+3、6y+4(y>=1)其中,6y、6y+2、6y+3、6y+4都不可能是素数,只有6y-1和6y+1可能是素数。另外,6y-1(y>=1)和 6y + 5 (y>=0)等价。所以,我们可以将n不为6y-1(或6y+5)和6y+1的数直接排除,排除方法为,下面要剔除掉6y-1(或6y+5)和6y+1中的非素数,这里大家比较疑惑的可能有两点:for循环i自增为啥是 6for循环中素数判定的条件为啥是 n % i === 0 || n % (i+2) === 0我们看上面图解,可以发现,6y-1,是基数为5,差值为6的等差数列,即 5 + 6x :对于 5 + 6x 而言,如果x为5的倍数(5 * z),则5 + 6x = 5 + 6 * 5 * z = 5 *(1+6z),则此时5 + 6x可以被5整除。5 + 6x 还可以转化为 5 + 6 + 6 * (x-1) = 11 + 6(x-1),则只要x-1为11的倍数,则5 + 6x可以被11整除,5 + 6x 还可以转化为 5 + 12 + 6 * (x-2) = 17 + 6(x-2),则只要x-2为17的倍数,则5 + 6x可以被17整除……6y+1,是基数为7,差值为6的等差数列,即 7 + 6x :对于 7 + 6x 而言,如果x为7的倍数(7 * z),则7 + 6x = 7 + 6 * 7 * z = 7 *(1+6z),则此时7 + 6x可以被7整除。7 + 6x 还可以转化为 7 + 6 + 6 * (x-1) = 13 + 6(x-1),则只要x-1为13的倍数,则7 + 6x可以被13整除,7 + 6x 还可以转化为 7 + 12 + 6 * (x-2) = 19 + 6(x-2),则只要x-2为19的倍数,则7 + 6x可以被19整除,……所以6y-1和6y+1可能整除的数自增量为6,这是for循环i自增为啥是 6的原因且6y-1和6y+1的整除数基数为5和7,相差为2,这是for循环中素数判定的条件为啥是 n % i === 0 || n % (i+2) === 0的原因此时时间复杂度为 O(sqrt(n) / 3)感谢各位的阅读,以上就是“javascript如何求素数”的内容了,经过本文的学习后,相信大家对javascript如何求素数这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是百云主机,小编将为大家推送更多相关知识点的文章,欢迎关注!
本篇内容主要讲解“MybatisPlus中的流式查询怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MybatisPlus中的流式查询怎么使用”吧!mybatis plus 中自定义如下接口,就可以实现流式查…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。