首页 > 编程知识 正文

判断是否是素数,什么数是质数

时间:2023-05-03 16:31:57 阅读:50339 作者:1114

一、概念介绍大家都在中学学过,但很少介绍。 大致列举两点。

素数也称为素数。 是大于1的自然数,除了1和本身以外,不能被其他自然数整除的数称为素数,否则称为合数。 0和1既不是素数也不是合数,最小的素数是2

二、方法介绍1 .最直观但效率最低的写法publicstaticbooleanisprime (intn ) if ) n=3) { return n 1; }for(intI=2; i n; I ) if(n%I==0) {返回假; } }返回真; }这里特别处理了3以下的数量。 因为3以下的自然数只有2和3是素数。

然后,从2开始,到小于它自己,依次判断能否被n整除就可以了。 能被整除的不是素数,否则是素数。

2 .如果初步优化n为整数,则一定存在两个不是1的约数p1和p2。 其中p1=sqrt(n )、p2=sqrt(n ) n )。 这样,可以改进上述方法以优化循环数。 如下所示。

公共布尔型anisprime (intn ) if (n=3) { return n 1; (intsqrt=(int ) Math.sqrt(n ) n; for(intI=2; i=sqrt; I ) if(n%I==0) {返回假; } }返回真; }

3 .继续优化,继续分析。 其实质数也有始终等于6x-1或6x 1的特征。 其中,x是1以上的自然数。

如何论证这个结论,其实并不难。 首先,6x可以被6整除,所以肯定不是质数; 其次,6x 2肯定也不是素数。 因为能被2整除; 按顺序,6x 3必须能被3整除; 6x 4一定能被2整除。 那么,可能只有6x 1和6x 5(即等同于6x-1 )是素数。 因此,将循环的步数设为6,每次仅判断6两侧的数量即可。

publicstaticbooleanisprime (intnum ) if ) num=3) { return num 1; (不在//6倍数两侧的一定不是素数if (num % 6!=1编号% 6!=5) {返回假; (intsqrt=(int ) math.sqrt ) num; for(intI=5; i=sqrt; i =6) if(num%I==0||num% ) I2 )==0) {返回假; } }返回真; }输入的自然数n小时,效果可能不太明显,但n越大,该方法的执行效率越明显。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。