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 相关文章推荐
PHP5中MVC结构学习
Oct 09 PHP
一段php加密解密的代码
Jul 16 PHP
晋城吧对DiscuzX进行的前端优化要点
Sep 05 PHP
php生成缩略图示例代码分享(使用gd库实现)
Jan 20 PHP
php模仿asp Application对象在线人数统计实现方法
Jan 04 PHP
php实现的网络相册图片防盗链完美破解方法
Jul 01 PHP
PHP实现bitmap位图排序与求交集的方法
Jul 28 PHP
PHP基于新浪IP库获取IP详细地址的方法
May 04 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
Aug 30 PHP
PHP 超级全局变量相关总结
Jun 30 PHP
Laravel相关的一些故障解决
Aug 19 PHP
如何在PHP中读写文件
Sep 07 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
zf框架的校验器InArray使用示例
2014/03/13 PHP
php单一接口的实现方法
2015/06/20 PHP
laravel5表单唯一验证的实例代码
2019/09/30 PHP
javascript 字符串连接的性能问题(多浏览器)
2008/11/18 Javascript
javascript学习笔记(十四) window对象使用介绍
2012/06/20 Javascript
Extjs中的GridPanel隐藏列会显示在menuDisabled中解决方法
2013/01/27 Javascript
javascript:void(0)的作用示例介绍
2013/10/28 Javascript
js 上下左右键控制焦点(示例代码)
2013/12/14 Javascript
js禁止回车提交表单的示例代码
2013/12/23 Javascript
js判断手机号运营商的方法
2015/10/23 Javascript
js实现滚动条滚动到某个位置便自动定位某个tr
2021/01/20 Javascript
Bootstrap Table使用方法详解
2016/08/01 Javascript
AngularJS自定义插件实现网站用户引导功能示例
2016/11/07 Javascript
vue 请求后台数据的实例代码
2017/06/22 Javascript
javascript将非数值转换为数值
2018/09/13 Javascript
4个顶级开源JavaScript图表库
2018/09/29 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
2018/12/28 Javascript
深入了解Hybrid App技术的相关知识
2019/07/17 Javascript
Python常用小技巧总结
2015/06/01 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
2018/05/24 Python
python实现移位加密和解密
2019/03/22 Python
Python利用神经网络解决非线性回归问题实例详解
2019/07/19 Python
python实现京东订单推送到测试环境,提供便利操作示例
2019/08/09 Python
Pytorch数据拼接与拆分操作实现图解
2020/04/30 Python
CSS3实现文字波浪线效果示例代码
2016/11/20 HTML / CSS
美国卡车、吉普车和SUV零件网站:4 Wheel Parts
2016/11/24 全球购物
应届生学校辅导员求职信
2013/11/07 职场文书
行政总监岗位职责
2013/12/05 职场文书
军训自我鉴定怎么写
2014/02/13 职场文书
小学教师自我鉴定范文
2014/03/20 职场文书
入党综合考察材料
2014/06/02 职场文书
关于感恩的演讲稿800字
2014/08/26 职场文书
大学生交通专业求职信
2014/09/01 职场文书
小组组名及励志口号
2015/12/24 职场文书
心得体会该怎么写呢?
2019/06/27 职场文书
Android RecyclerView实现九宫格效果
2022/06/28 Java/Android