首页 开发编程 正文

php怎么判断质数 计算机怎么求质数

1、php怎么判断质数,编程输入一个正整数?intmain(){intd;inti,boolm=true;=sqrt(d)){if(d%i==0){m=false;}if(m)printf("}2、如何快速判断一个三位数是质数还是合数有没有更简单的;②该三位数的各位数字相加是否是3的倍数。3、如何判断一个数是质数和合数。就是质...

php怎么判断质数,编程输入一个正整数?

#include"stdio.h"#include"math.h"intmain(){intd;inti,j;boolm=true;printf("输入一个正整数:")

;scanf("%d",&d);i=2;while(i<=sqrt(d)){if(d%i==0){m=false;break;}i=i+1;}if(m)printf("Yes")

;elseprintf("No");}

如何快速判断一个三位数是质数还是合数有没有更简单的?

①看看末尾是否为0,2,4,6,8,5,如果是,它就不是质数,末尾为5,5肯定是它的因数,如555,末尾为其它,为偶数,2肯定是它的因数,如360,288等。

②该三位数的各位数字相加是否是3的倍数,如是,该数为合数,如123各位数字相加为6,所以3是它的因数。

又如653,各位数字相加为14,不是3的倍数,它是质数。

如何判断一个数是质数和合数?

找这个数的所有因数,有除了1和它本身以外的,就是合数,只有1和它本身的,就是质数

计算机怎么求质数?

完全遍历法:

这种算法比较基本,对于每个数n,将n依次从2除到n,然后对余数进行比较,如果余数是0,则除得尽,如果不是0则除不尽,按照质数的定义,只有1和他本身能成为因数也就是除得尽,所以只有除得尽的数不大于两个时,才能是质数。

这种算法的好处是符合大多数人的第一反应,和定义契合得比较好,也比较省空间,但问题是假如我这里n输入了1000000+时,这个运算时间是非常长的,其算法复杂度高达1*10^12,小数据可以用遇到大数据就很难实现高效了。

开根号遍历法

仔细分析算法我们会发现,其实在做除法运算时不需要除每一个数,只要除到根号n即可。这是因为当除数大于根号n时,其结果肯定是小于根号n的(可以用反证法证明),假如此时能除得尽,那么该种可能早就在小于根号n的遍历中被排除掉了,就没有意义了。这样就减小了一部分算法复杂度。

筛选法

筛选法的核心是牺牲内存换速度,因为其不通过遍历来表达一列数而是直接通过数组来表达。用静态的bool量去变现数的状态。

其核心流程为:

定义一个bool数组,其下标为我们要判断的数,其值为true。表示初始阶段所有数都假定是素数。

开始对这个数组进行筛选(及把值改为false),实现把因数含有2的所有数筛掉,把因数含有3的数筛掉,把因数含有5的数筛掉…一直筛选到只剩下素数为止。

这种方法运算效率非常高,特别是在十万级以上的数中,其牺牲掉的内存不多,但对速度的提升确实是非常显著的。

什么是质数讲解?

质数是指一个数只要1和本身两个因数的数。比如:2的因数有1、2。所以2是质数。

按质数的意义,我们可以根据一个数因数的个数来判断一个数是不是质数。比如31是质数吗?我们只要想31除了1和31之外没有别的因数,所以31是质数。

我们至少要熟记20以内的质数2、3、5、7、11、13、17、19共8个。除2以外的质数都是奇数,2是唯一一个既是偶数又是质数的数。

本文转载自互联网,如有侵权,联系删除