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 进程锁定问题分析研究
Nov 24 PHP
Drupal简体中文语言包安装教程
Sep 27 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
Nov 18 PHP
PHP 实现判断用户是否手机访问
Jan 21 PHP
在html文件中也可以执行php语句的方法
Apr 09 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
Jun 17 PHP
用PHP生成excel文件到指定目录
Jun 22 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
Nov 27 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
Dec 14 PHP
详解yii2实现分库分表的方案与思路
Feb 03 PHP
PHP实现获取第一个中文首字母并进行排序的方法
May 09 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
May 28 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中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
9条PHP编程小知识及易犯的小错误
2015/01/22 PHP
php实现html标签闭合检测与修复方法
2015/07/09 PHP
CodeIgniter辅助之第三方类库third_party用法分析
2016/01/20 PHP
支付宝支付开发――当面付条码支付和扫码支付实例
2016/11/04 PHP
PHP观察者模式原理与简单实现方法示例
2017/08/25 PHP
用js实现的抽象CSS圆角效果!!
2007/05/03 Javascript
JavaScript中实现块作用域的方法
2010/04/01 Javascript
优化innerHTML操作(提高代码执行效率)
2011/08/20 Javascript
JavaScript入门之基本函数详解
2011/10/21 Javascript
JS+CSS设置img在DIV中只显示Img垂直居中的部分
2013/10/24 Javascript
如何学习Javascript入门指导
2013/11/01 Javascript
自己封装的常用javascript函数分享
2015/01/07 Javascript
JavaScript通过select动态更换图片的方法
2015/03/23 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
2015/08/04 Javascript
简介AngularJS中$http服务的用法
2016/02/06 Javascript
微信小程序 底部导航栏目开发资料
2016/12/05 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
2017/08/15 Javascript
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
js实现随机圆与矩形功能
2020/10/29 Javascript
[05:34]2014DOTA2国际邀请赛中国区预选赛精彩TOPPLAY第二弹
2014/06/25 DOTA
[42:11]TNC vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python的迭代器和生成器
2015/07/29 Python
通过Python使用saltstack生成服务器资产清单
2016/03/01 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
Python的标准模块包json详解
2017/03/13 Python
用Python shell简化开发
2018/08/08 Python
python使用Plotly绘图工具绘制水平条形图
2020/03/25 Python
django 多数据库及分库实现方式
2020/04/01 Python
个人职业生涯规划书1500字
2013/12/31 职场文书
开展创先争优活动总结
2014/08/28 职场文书
2015年乡镇平安建设工作总结
2015/05/13 职场文书
python 实现体质指数BMI计算
2021/05/26 Python
Java生成读取条形码和二维码的简单示例
2021/07/09 Java/Android
SQL解决未能删除约束问题drop constraint
2022/05/30 SQL Server
Java实现超大Excel文件解析(XSSF,SXSSF,easyExcel)
2022/07/15 Java/Android