关于“php中怎么求质数”的问题,小编就整理了【5】个相关介绍“php中怎么求质数”的解答:
怎么用PHP写出1到100的质数?//求100以内质数for ($i = 1; $i
用javascript或PHP语言实现网页输出1到1000内的素数(质数)。要求排列整齐(建议每行20个数)?<html>
<head>
<title>素数</title>
<meta http-equiv="content-type" content="text/html; charset=gb2312" />
<style>
td {
text-align:center;
width:30px;
}
</style>
</head>
<body>
<?php
function Sushu($n)
{
$flag= array_fill(1, $n, true);
$flag[1]=false;
for ($i=2; $i<=sqrt($n); $i++)
{
if (isset($flag[$i]) && $flag[$i])
{
for ($j=$i; $j*$i<=$n; $j++)
{
//$flag[$i*$j] = false;
unset($flag[$i*$j]);
}
}
}
unset($flag[1]);
return $flag;
计算机怎么求质数?这种算法比较基本,对于每个数n,将n依次从2除到n,然后对余数进行比较,如果余数是0,则除得尽,如果不是0则除不尽,按照质数的定义,只有1和他本身能成为因数也就是除得尽,所以只有除得尽的数不大于两个时,才能是质数。
这种算法的好处是符合大多数人的第一反应,和定义契合得比较好,也比较省空间,但问题是假如我这里n输入了1000000+时,这个运算时间是非常长的,其算法复杂度高达1*10^12,小数据可以用遇到大数据就很难实现高效了。
开根号遍历法
仔细分析算法我们会发现,其实在做除法运算时不需要除每一个数,只要除到根号n即可。这是因为当除数大于根号n时,其结果肯定是小于根号n的(可以用反证法证明),假如此时能除得尽,那么该种可能早就在小于根号n的遍历中被排除掉了,就没有意义了。这样就减小了一部分算法复杂度。
筛选法
筛选法的核心是牺牲内存换速度,因为其不通过遍历来表达一列数而是直接通过数组来表达。用静态的bool量去变现数的状态。
其核心流程为:
定义一个bool数组,其下标为我们要判断的数,其值为true。表示初始阶段所有数都假定是素数。
开始对这个数组进行筛选(及把值改为false),实现把因数含有2的所有数筛掉,把因数含有3的数筛掉,把因数含有5的数筛掉…一直筛选到只剩下素数为止。
第一层循环是将1-100递增1步长的循环。
第二层循环是在1-i{上一层所到位置}中循环, $i%$j ==0 这一步是 判断 i是否能背比i小{逐一减小}的数 整除{注意没有它本身 $j!=$i} 如果存在上一步 那么 将记录k=1 最下面循环内 依据k的值 判断i是否能被2-(i-1)中的数整除,并输出echo 它们。本段代码应该输出1-100间的素数
质数怎么快速算出来?质数
是通过因式分解
算出来。
质数定义是在大于1的自然数
中除了1和它本身以外不再有其他因数的数称为质数;素数
就是质数,即除了1和它本身以外任何数都不能整除他的数。
素数可以这样算出来:将知道的素数全部乘起来再加一;比如知道2是质数,3是质数,可以得到质数2 X 3 + 1 = 7这个质数,知道2是质数,3是质数,5是质数,可以得到2 x 3 x 5 + 1 = 31 这个质数。
扩展资料:
质数的性质
1、质数p的约数
只有两个: 1和p。
2、初等数学基本定理:任一大于1的自然数,要么本身是质数,要么可以分解为几个质数之积,且这种分解是唯一的。
3、质数的个数是无限的。
4、质数的个数公式 T(n) 是不减函数。
5、若n为正整数
,在n2到(n+1) 2之间至少有一个质数。
6、若n为大于或等于2的正整数,在n到n!之间至少有一个质数。
8、若质数p为不超过n (n>4)的最大质数,则p>n/2。
第一,就是根据质数的定义,来确定一个数是不是质数。质数的定义:大于1且只能被1和自身整除的自然数(如:2、3、5、7、11等)。
第二,把它各个位都加起来,看能不能整除三,如果能,就不是质数。
第三,看它末尾是不是0,2,4,5,6,8,如果是,也不是质数。
(因为末尾是偶数的,能被2整除;5或0的,能被5整除)
第四 ,1既不是质数也不是合数。
到此,以上就是小编对于“php中怎么求质数”的问题就介绍到这了,希望介绍关于“php中怎么求质数”的【5】点解答对大家有用。