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 相关文章推荐
从MySQL数据库表中取出随机数据的代码
Sep 05 PHP
常用的php对象类型判断
Aug 27 PHP
在smarty模板中使用PHP函数的方法
Apr 23 PHP
PHP中常用的转义函数
Feb 28 PHP
thinkphp中memcache的用法实例
Nov 29 PHP
php实现读取和写入tab分割的文件
Jun 01 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
May 18 PHP
PHP HTTP 认证实例详解
Nov 03 PHP
php常用字符函数实例小结
Dec 29 PHP
php smtp实现发送邮件功能
Jun 22 PHP
php删除二维数组中的重复值方法
Mar 12 PHP
浅谈laravel框架sql中groupBy之后排序的问题
Oct 17 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 Web开发MVC框架的Smarty使用说明
2013/04/19 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
2016/02/15 PHP
详解php用static方法的原因
2018/09/12 PHP
Extjs中DisplayField的日期或者数字格式化扩展
2010/09/03 Javascript
关于在IE下的一个安全BUG --可用于跟踪用户的系统鼠标位置
2013/04/17 Javascript
网页整体变灰白色(兼容各浏览器)实例
2013/04/21 Javascript
JavaScript中的无阻塞加载性能优化方案
2014/10/10 Javascript
浅析webapp框架AngularUI的demo
2014/12/21 Javascript
使用JavaScript链式编程实现模拟Jquery函数
2014/12/21 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
javascript如何创建对象
2016/08/29 Javascript
Ajax 加载数据 练习代码
2017/01/05 Javascript
self.attachevent is not a function的解决方法
2017/04/04 Javascript
微信小程序实现文字跑马灯
2020/05/26 Javascript
vue draggable resizable 实现可拖拽缩放的组件功能
2019/07/15 Javascript
浅谈layer弹出层按钮颜色修改方法
2019/09/11 Javascript
详解vue中$nextTick和$forceUpdate的用法
2019/12/11 Javascript
[05:03]显微镜下的DOTA2第十期——Ti3豪之超神幽鬼
2014/06/23 DOTA
[01:48]DOTA2 2015国际邀请赛中国区预选赛第二日战报
2015/05/27 DOTA
Python的Django框架使用入门指引
2015/04/15 Python
Python实现购物程序思路及代码
2017/07/24 Python
分享给Python新手们的几道简单练习题
2017/09/21 Python
python素数筛选法浅析
2018/03/19 Python
Python 通过调用接口获取公交信息的实例
2018/12/17 Python
Python程序包的构建和发布过程示例详解
2019/06/09 Python
python读写csv文件的方法
2019/08/13 Python
详解使用django-mama-cas快速搭建CAS服务的实现
2019/10/30 Python
AmazeUI 按钮交互的实现示例
2020/08/24 HTML / CSS
物业工程部主管岗位职责
2015/04/16 职场文书
体检通知范文
2015/04/21 职场文书
同步小康驻村工作简报
2015/07/20 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书
Python中seaborn库之countplot的数据可视化使用
2021/06/11 Python
浅析Redis Sentinel 与 Redis Cluster
2021/06/24 Redis
关于Spring配置文件加载方式变化引发的异常详解
2022/01/18 Java/Android
python区块链持久化和命令行接口实现简版
2022/05/25 Python