PHP循环学习十一:怎么判断素数并打印1~100的素数、统计其数目

在之前的文章《PHP循环学习十:判定水仙花数,打印全部水仙花数》中,我们给大家介绍一下判断水仙花数并利用循环输出所有水仙花数的方法,下面继续php循环的学习,介绍一下怎么判断一个数是不是素数,并输出1~100的素数,感兴趣的朋友可以学习了解一下~

首先我们来了解一下什么是素数?

素数(质数)是指除了1和它本身之外再不能被其他数整除的自然数;如果能被其他数整除则称为合数(规定1既不是质数也不是合数)。

例如:数字2、3、17、19都是素数,它们只能被1和本身整除。

那么如果给出一个数 num(例如17),我们怎么判断这个数 num 是不是素数呢?下面给大家介绍几种方法:

方法1:最简单的方法是根据素数的定义来求

思路:

  • 素数只能被1和本身整除,即只能被整除2次。

  • 因此我们利用循环,使用大于1小于等于N的各个自然数都去除一下N,统计被整除的次数,如果次数大于2则不是素数;如果等于2则则是素数。

下面来看看实现代码:

<?php
header("content-type:text/html;charset=utf-8");
$num=17;
$count = 1;
for($i = 2; $i <= $num; $i++) {
    if(($num % $i)== 0)
        $count ++;
}
if($count == 2) {
    echo $num . '就是素数<br/>';
}else{
	echo $num . '不是素数<br/>';
}
?>

输出结果:

1.png

方法2:

思路:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

下面来看看实现代码:

<?php
header("content-type:text/html;charset=utf-8");
$num=19;
$flag = 1;
for($i = 2; $i*$i <= $num; $i++) //能被2 - sqrt(i)整除的数
{
	if($num % $i == 0)
	{
		$flag = 0;
		break;
	}
}
if($flag == 1) {
    echo $num . '就是素数<br/>';
}else{
	echo $num . '不是素数<br/>';
}
?>

输出结果:

2.png

好了知道怎么给定一个数来判断是不是素数了,下面加大难度:怎么给定一个范围(例如1~100),输出全部素数呢?

是不是要使用两个循环,在上面for循环的基础上,在外面套一层for循环来控制范围即可。我们来看看实现代码(直接使用方法2的代码):

<?php
header("content-type:text/html;charset=utf-8");
$count = 0;
for($k = 2; $k <= 100; $k++){ //从2开始,遍历到100
	$flag = 1;
	for($i = 2; $i*$i <= $k; $i++) {//能被2 - sqrt(i)整除的数
	
		if($k % $i == 0)
		{
			$flag = 0;
			break;
		}
	}
	if($flag == 1) {
	    echo $k . '是素数<br/>';
		$count ++;
	}
}
echo '<br/>1~100间共有 '.$count." 个素数";
?>

输出结果:

3.png

可以看出,我们在内层for循环的循环体中,使用一个计数器$count,每输出一个素数后,自增1,这样就可以统计出1~100内有多少素数了。

好了就说到这里了,有其他想知道的,可以点击这个哦。→ →php视频教程

推荐:《PHP面试题大汇总(收藏)》

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » PHP循环学习十一:怎么判断素数并打印1~100的素数、统计其数目