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的一个基础知识 表单提交
Jul 04 PHP
PHP文件操作实现代码分享
Sep 01 PHP
初步介绍PHP扩展开发经验分享
Sep 06 PHP
解析crontab php自动运行的方法
Jun 24 PHP
php定义数组和使用示例(php数组的定义方法)
Mar 29 PHP
ThinkPHP查询语句与关联查询用法实例
Nov 01 PHP
PHP 生成N个不重复的随机数
Jan 21 PHP
php制作的简单验证码识别代码
Jan 26 PHP
详解Yii2 rules 的验证规则
Dec 02 PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
May 13 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入门学习笔记之一
2010/10/12 PHP
php数组键名技巧小结
2015/02/17 PHP
一个PHP实现的轻量级简单爬虫
2015/07/08 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
CSS+Jquery实现页面圆角框方法大全
2009/12/24 Javascript
收集的一些Array及String原型对象的扩展实现代码
2010/12/05 Javascript
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
2015/06/05 Javascript
简单实现限制uploadify上传个数
2015/11/16 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
Bootstrap页面缩小变形的快速解决办法
2017/02/03 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
基于vue.js轮播组件vue-awesome-swiper实现轮播图
2017/03/17 Javascript
JS请求servlet功能示例
2017/06/01 Javascript
原生js 封装get ,post, delete 请求的实例
2017/08/11 Javascript
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
浅谈高大上的微信小程序中渲染html内容—技术分享
2018/10/25 Javascript
详解Webpack如何引入CDN链接来优化编译后的体积
2019/06/21 Javascript
基于iview-admin实现动态路由的示例代码
2019/10/02 Javascript
如何通过JS实现日历简单算法
2020/10/14 Javascript
[15:39]教你分分钟做大人:龙骑士
2014/10/30 DOTA
在Python中利用Into包整洁地进行数据迁移的教程
2015/03/30 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
2018/01/22 Python
python之matplotlib学习绘制动态更新图实例代码
2018/01/23 Python
python实现将多个文件分配到多个文件夹的方法
2019/01/07 Python
windows 10 设定计划任务自动执行 python 脚本的方法
2019/09/11 Python
python通过文本在一个图中画多条线的实例
2020/02/21 Python
Python Request类源码实现方法及原理解析
2020/08/17 Python
python中实现栈的三种方法
2020/12/19 Python
软件缺陷的分类都有哪些
2014/08/22 面试题
幼儿园标语大全
2014/06/19 职场文书
致三级跳运动员加油稿
2015/07/21 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
python基础之文件处理知识总结
2021/05/23 Python
css3应用示例:新增的选择器
2022/03/16 HTML / CSS
redis 解决库存并发问题实现数量控制
2022/04/08 Redis