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分页代码学习示例分享
Feb 20 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
Apr 17 PHP
基于php实现七牛抓取远程图片
Dec 01 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
Jan 11 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
Mar 17 PHP
深入理解PHP原理之执行周期分析
Jun 01 PHP
CI框架数据库查询缓存优化的方法
Nov 21 PHP
Docker配置PHP开发环境教程
Dec 21 PHP
YII中Ueditor富文本编辑器文件和图片上传的配置图文教程
Mar 15 PHP
PHP实现QQ登录的开原理和实现过程
Feb 04 PHP
CodeIgniter框架钩子机制实现方法【hooks类】
Aug 21 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
Oct 11 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 session应用实例 登录验证
2009/03/16 PHP
php一行代码获取文件后缀名实例分析
2014/11/12 PHP
php中获取主机名、协议及IP地址的方法
2014/11/18 PHP
JS对URL字符串进行编码/解码分析
2008/10/25 Javascript
jQuery 行级解析读取XML文件(附源码)
2009/10/12 Javascript
JS 中document.URL 和 windows.location.href 的区别
2009/11/11 Javascript
js实现无需数据库的县级以上联动行政区域下拉控件
2013/08/14 Javascript
如何解决Jquery库及其他库之间的$命名冲突
2013/09/15 Javascript
js全屏显示显示代码的三种方法
2013/11/11 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
如何在node的express中使用socket.io
2014/12/15 Javascript
jQuery简单实现日历的方法
2015/05/04 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
2017/02/08 Javascript
Vue组件的使用教程详解
2018/01/05 Javascript
详解vue-cli下ESlint 配置说明
2018/09/03 Javascript
p5.js绘制旋转的正方形
2019/10/23 Javascript
[01:01:24]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第三局
2016/02/25 DOTA
[56:41]iG vs Winstrike 2018国际邀请赛小组赛BO2 第二场
2018/08/17 DOTA
python实现360的字符显示界面
2014/02/21 Python
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
把MySQL表结构映射为Python中的对象的教程
2015/04/07 Python
Python SqlAlchemy动态添加数据表字段实例解析
2018/02/07 Python
Python实现的远程登录windows系统功能示例
2018/06/21 Python
django2+uwsgi+nginx上线部署到服务器Ubuntu16.04
2018/06/26 Python
python定位xpath 节点位置的方法
2019/08/27 Python
python实现最大优先队列
2019/08/29 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
2020/02/06 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
Python collections模块的使用方法
2020/10/09 Python
《飞向蓝天的恐龙》教学反思
2014/04/09 职场文书
项目申报专员岗位职责
2014/07/09 职场文书
领导四风问题整改措施思想汇报
2014/10/13 职场文书
2014年个人总结范文
2015/03/09 职场文书
施工安全保证书
2015/05/09 职场文书
道歉短信大全
2015/05/12 职场文书
MySQL数据库如何给表设置约束详解
2022/03/13 MySQL