PHP实现的分解质因数操作示例


Posted in PHP onAugust 01, 2018

本文实例讲述了PHP实现的分解质因数操作。分享给大家供大家参考,具体如下:

思路:

如果要计算$num的质数,则至少收集$num以内的质数数组,判断$num是否在质数数组里:

如果否,则判断当前质数$zhishu[$i]是否能再次将整除后的数整除,如果能,则质数数组“游标”不移动(还让当前质数$zhishu[$i]对被整除后的数取模)

如果不能(再次将整除后的数整除),则用下一个质数(让$i++)去测试是否整除。如果否($num在质数数组里),则表示$num本身就是个质数,直接echo之。(思路看得糊涂的话,直接看代码吧)

首先:用一个函数收集一定范围内的质数放到数组里返回。(把1从质数里剔除,从2开始算质数),代码和注释如下:

//得到1000以内的质数
function get_zhishu($num=1000){
  $num = floor($num);
  $zhishu = array();
  //先得到1000以内的质数
  for($i=1; $i<=$num; $i++){
    $flag = true; //当flag为false时表示该数不是素数
    for($j=2; $j<$num; $j++){ //$j从2开始,因为除数为1时,肯定能整除
      if($i>$j){ //$j如果比$i还大,取模肯定不为0,没有比较的意义
        $mod = $i%$j;
        if($mod == 0 ){ //当除数$j为$i以内时,如果取模为0,表示该数不是素数
          $flag = false;
        }
      }
    }
    if($flag){
      array_push($zhishu, $i);//如果$flag为真,则$i是质数
    }
  }
  array_shift($zhishu); //把1从质数数组中剔除
  return $zhishu;
}
$zhishu = get_zhishu(1000); //得到1到1000之内的质数

然后:从质数数组中,挨个取出(从最小的质数开始)符合条件(能被整除)的质数。代码和注释如下:

/**
 * @param int $num 要分解的质数
 * @param array $zhishu 1000以内的质数数组
 * @param int $i 相当于质数数组的"游标"
 * @author misaka去年夏天
 */
function fenjie_num($num, $zhishu, $i=0){
  if(!is_int($num) || $num<0){
    exit('请输入正整数!');
  }
  if(in_array($num, $zhishu)){ //如果该数为质数,则echo之
    echo $num,'<br />';
  }else{
    $ceil = ceil($num/$zhishu[$i]);
    if($ceil == ($num/$zhishu[$i])){
      echo $zhishu[$i],'<br />';
      if($ceil%$zhishu[$i]!=0){
        //如果当前质数还能被$ceil整除,则继续用该质数(不用$i++),比如90分解为2、3、3、5,否则让$i++再递归
        $i++;
      }
      fenjie_num((int)$ceil, $zhishu, $i);
    }else{
      fenjie_num($num, $zhishu, $i+1); //对于99这样的,不是质数,但也没第一次被整除的,用下一个质数($i++)测试它
    }
  }
}
fenjie_num(390, $zhishu);

运行结果:

2
3
5
13

PS:这里再为大家推荐几款计算工具供大家进一步参考借鉴:

在线分解质因数计算器工具:
http://tools.3water.com/jisuanqi/factor_calc

在线一元函数(方程)求解计算工具:
http://tools.3water.com/jisuanqi/equ_jisuanqi

科学计算器在线使用_高级计算器在线计算:
http://tools.3water.com/jisuanqi/jsqkexue

在线计算器_标准计算器:
http://tools.3water.com/jisuanqi/jsq

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php+mysql事务rollback&amp;commit示例
Feb 08 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
Dec 18 PHP
php实现TCP端口检测的方法
Apr 01 PHP
php简单实现快速排序的方法
Apr 04 PHP
php利用事务处理转账问题
Apr 22 PHP
php截取视频指定帧为图片
May 16 PHP
Yii2框架实现数据库常用操作总结
Feb 08 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
Sep 22 PHP
PHP实现用session来实现记录用户登陆信息
Oct 15 PHP
gearman中任务的优先级和返回状态实例分析
Feb 27 PHP
PHP date_default_timezone_set()设置时区操作实例分析
May 16 PHP
PHP7 整型处理机制修改
Mar 09 PHP
Laravel中为什么不使用blpop取队列详析
Aug 01 #PHP
Laravel5.5以下版本中如何自定义日志行为详解
Aug 01 #PHP
PHP实现随机数字、字母的验证码功能
Aug 01 #PHP
PHP使用XMLWriter读写xml文件操作详解
Jul 31 #PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
Jul 31 #PHP
PHP常用日期加减计算方法实例小结
Jul 31 #PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
Jul 30 #PHP
You might like
解析php中array_merge与array+array的区别
2013/06/21 PHP
PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
2015/03/03 PHP
PHP对文件夹递归执行chmod命令的方法
2015/06/19 PHP
PHP读取文件的常见几种方法
2016/11/03 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
JavaScript Event事件学习第一章 Event介绍
2010/02/07 Javascript
通过下拉框的值来确定输入框是否可以为空的代码
2011/10/18 Javascript
js处理json以及字符串的比较等常用操作
2013/09/08 Javascript
jquery实现页面图片等比例放大缩小功能
2014/02/12 Javascript
深入探密Javascript数组方法
2015/01/08 Javascript
jQuery实现锚点scoll效果实例分析
2015/03/10 Javascript
JS实现网页Div层Clone拖拽效果
2015/09/26 Javascript
vue.js学习笔记之绑定style样式和class列表
2016/10/31 Javascript
jQuery实现根据生日计算年龄 星座 生肖
2016/11/23 Javascript
jQuery排序插件tableSorter使用方法
2017/02/10 Javascript
jQuery实现 RadioButton做必选校验功能
2017/06/15 jQuery
使用nodeJs来安装less及编译less文件为css文件的方法
2017/11/20 NodeJs
基于angular6.0实现的一个组件懒加载功能示例
2018/04/12 Javascript
在项目vue中使用echarts的操作步骤
2020/09/07 Javascript
详解JavaScript编程中的window与window.screen对象
2015/10/26 Python
Python用zip函数同时遍历多个迭代器示例详解
2016/11/14 Python
详解Python之数据序列化(json、pickle、shelve)
2017/03/30 Python
python 矩阵增加一行或一列的实例
2018/04/04 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
python自定义函数实现一个数的三次方计算方法
2019/01/20 Python
Python 实现文件打包、上传与校验的方法
2019/02/13 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
Django重设Admin密码过程解析
2020/02/10 Python
python实现音乐播放和下载小程序功能
2020/04/26 Python
python实现在列表中查找某个元素的下标示例
2020/11/16 Python
css3的transform造成z-index无效解决方案
2014/12/04 HTML / CSS
高三政治教学反思
2014/02/06 职场文书
自主招生自荐信格式
2015/03/04 职场文书
六年级作文之家庭作文
2019/12/12 职场文书
教你用python实现12306余票查询
2021/06/30 Python
javascript Number 与 Math对象的介绍
2021/11/17 Javascript