質数又称素数指整数在一个大于1的自然数中,除了1和此整数自身外没法被其他自然数整除的数。换句话说只有两个正因数(1和自己)的自然数即为素数。比1大但不是素数的数称为合数1和0既非素数也非合数。
你对这个回答的评价是
素数就是合数,比较优化的素数算法应该是用筛选法
之前也有解决过这个问题,假设要求的数是 i ,很暴力的从2 到 i-1 对i进行取余运算非常耗费性能。
后面再回头来看其实有很多地方可以优化
后面知道了有更加优化的 就是 2 4 8其实,2是4 的倍数4是16的倍数,其实 求质数(素数) 只需要从2 到根号 i 就可以求出了
要得到自然数n以内的全部素数必须把不大于
的所有素数嘚倍数剔除,剩下的就是素数 [1]
给出要筛的范围n,找出以内的先用2去筛,即把2留下把2的倍数剔除掉;再用下一个,也就是3筛把3留下,把3的倍数剔除掉;接下去用下一个质数5筛把5留下,把5的剔除掉;不断重复下去......
列出2以后的所有序列:
标出序列中的第一个素数,也僦是2序列变成:
将剩下序列中,划掉2的倍数序列变成:
如果现在这个序列中最大数小于最后一个标出的素数的平方,那么剩下的序列Φ所有的数都是素数否则回到第二步。
本例中因为25大于2的平方,我们返回第二步:
剩下的序列中第一个素数是3将主序列中3的倍数划掉,主序列变成:
我们得到的素数有:23
25仍然大于3的平方,所以我们还要返回第二步:
现在序列中第一个素数是5同样将序列中5的倍数划掉,主序列成了:
我们得到的素数有:23,5
因为23小于5的平方,跳出循环.
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。